You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by zh...@apache.org on 2019/07/03 02:51:16 UTC

[servicecomb-pack] 02/04: SCB-1321 Set endTime of SagaData after actor terminates

This is an automated email from the ASF dual-hosted git repository.

zhanglei pushed a commit to branch SCB-1321
in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git

commit 482cf5e52ce98af8a7d2be58b37fffd75e913a8b
Author: Lei Zhang <zh...@apache.org>
AuthorDate: Wed Jul 3 09:20:44 2019 +0800

    SCB-1321 Set endTime of SagaData after actor terminates
---
 .../apache/servicecomb/pack/alpha/fsm/SagaActor.java    | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
index 72be072..fc5477c 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
@@ -256,8 +256,6 @@ public class SagaActor extends
             }
         ).event(TxComponsitedCheckInternalEvent.class, SagaData.class,
             (event, data) -> {
-//              if ((!data.isTerminated() && data.getCompensationRunningCounter().intValue() > 0)
-//                  || hasCommittedTx(data)) {
               if (hasCompensationSentTx(data)) {
                 return stay().replying(data);
               } else {
@@ -268,7 +266,7 @@ public class SagaActor extends
             }
         ).event(SagaAbortedEvent.class, SagaData.class,
             (event, data) -> {
-              data.setTerminated(true);
+              //data.setTerminated(true);
               if (hasCommittedTx(data)) {
                 SagaEndedDomain domainEvent = new SagaEndedDomain(SagaActorState.FAILED);
                 return stay().replying(data).applying(domainEvent);
@@ -313,7 +311,6 @@ public class SagaActor extends
     when(SagaActorState.COMMITTED,
         matchAnyEvent(
             (event, data) -> {
-              data.setEndTime(System.currentTimeMillis());
               /**
                * deleteMessages 只会删除redis中actor的数据,但是不会删除actor的highestSequenceNr https://github.com/akka/akka/issues/21181
                * 已停止的 actor highestSequenceNr 需要手动清理,例如 actor 的持久化ID为 3c500008-7b9f-415f-b2fd-e6ad0d455fc1
@@ -332,7 +329,6 @@ public class SagaActor extends
     when(SagaActorState.SUSPENDED,
         matchAnyEvent(
             (event, data) -> {
-              data.setEndTime(System.currentTimeMillis());
               deleteMessages(lastSequenceNr());
               deleteSnapshot(snapshotSequenceNr());
               return stop();
@@ -343,7 +339,6 @@ public class SagaActor extends
     when(SagaActorState.COMPENSATED,
         matchAnyEvent(
             (event, data) -> {
-              data.setEndTime(System.currentTimeMillis());
               deleteMessages(lastSequenceNr());
               deleteSnapshot(snapshotSequenceNr());
               return stop();
@@ -375,6 +370,7 @@ public class SagaActor extends
               LOG.info("stop {} {}", data.getGlobalTxId(), state);
               data.setTerminated(true);
               data.setLastState(state);
+              data.setEndTime(System.currentTimeMillis());
               SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(getContext().getSystem())
                   .putSagaData(data.getGlobalTxId(), data);
             }
@@ -412,6 +408,9 @@ public class SagaActor extends
       TxEntity txEntity = data.getTxEntityMap().get(domainEvent.getLocalTxId());
       txEntity.setEndTime(System.currentTimeMillis());
       if (domainEvent.getState() == TxState.COMMITTED) {
+        // stop
+        data.setEndTime(System.currentTimeMillis());
+        data.setTerminated(true);
         txEntity.setState(domainEvent.getState());
       } else if (domainEvent.getState() == TxState.FAILED) {
         txEntity.setState(domainEvent.getState());
@@ -437,9 +436,11 @@ public class SagaActor extends
           }
         });
       } else if (domainEvent.getState() == SagaActorState.SUSPENDED) {
-
+        data.setEndTime(System.currentTimeMillis());
+        data.setTerminated(true);
       } else if (domainEvent.getState() == SagaActorState.COMPENSATED) {
-
+        data.setEndTime(System.currentTimeMillis());
+        data.setTerminated(true);
       }
     }
     LOG.debug("applyEvent: {} {}", stateName(), stateData().getGlobalTxId());