This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git
commit 1e0f417f6656c8572a6ba660e416d01c3817f06c Author: Lei Zhang <zhang...@apache.org> AuthorDate: Sun Mar 22 13:27:58 2020 +0800 SCB-1735 Add compensation timeout case for Integration Test --- .../alpha/server/fsm/AlphaIntegrationFsmTest.java | 27 ++++++++++++++++++++++ .../alpha/server/fsm/OmegaEventSagaSimulator.java | 27 ++++++++++++++++++++++ .../apache/servicecomb/pack/common/EventType.java | 3 ++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java index 7dd2600..15c1a0e 100644 --- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java +++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java @@ -184,6 +184,33 @@ public class AlphaIntegrationFsmTest { } @Test + public void middleTxAbortedEventAndCompensationTimeoutTest() { + omegaEventSender.onConnected(); + final String globalTxId = UUID.randomUUID().toString(); + final String localTxId_1 = UUID.randomUUID().toString(); + final String localTxId_2 = UUID.randomUUID().toString(); + omegaEventSender.getOmegaEventSagaSimulator() + .middleTxAbortedEventAndCompensationTimeoutEvents(globalTxId, localTxId_1, localTxId_2).stream().forEach(event -> { + omegaEventSender.getBlockingStub().onTxEvent(event); + }); + await().atMost(6, SECONDS).until(() -> { + SagaData sagaData = SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system) + .getLastSagaData(); + return sagaData != null && sagaData.isTerminated() + && sagaData.getLastState() == SagaActorState.SUSPENDED; + }); + SagaData sagaData = SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system) + .getLastSagaData(); + assertEquals(sagaData.getLastState(), SagaActorState.SUSPENDED); + assertEquals(sagaData.getTxEntities().size(), 2); + assertNotNull(sagaData.getBeginTime()); + assertNotNull(sagaData.getEndTime()); + assertTrue(sagaData.getEndTime().getTime() > sagaData.getBeginTime().getTime()); + assertEquals(sagaData.getTxEntities().get(localTxId_1).getState(), TxState.COMPENSATED_FAILED); + assertEquals(sagaData.getTxEntities().get(localTxId_2).getState(), TxState.FAILED); + } + + @Test public void lastTxAbortedEventTest() { omegaEventSender.onConnected(); final String globalTxId = UUID.randomUUID().toString(); diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java index 34348b5..13eb3f1 100644 --- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java +++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java @@ -61,6 +61,19 @@ public class OmegaEventSagaSimulator { return sagaEvents; } + public List<GrpcTxEvent> middleTxAbortedEventAndCompensationTimeoutEvents(String globalTxId, String localTxId_1, String localTxId_2){ + final int localTxId_1_ReverseTimeoutSecond = 2; + List<GrpcTxEvent> sagaEvents = new ArrayList<>(); + sagaEvents.add(sagaStartedEvent(globalTxId)); + sagaEvents.add(txStartedEvent(globalTxId, localTxId_1, globalTxId, "service a".getBytes(), "method a", 0, localTxId_1_ReverseTimeoutSecond)); + sagaEvents.add(txEndedEvent(globalTxId, localTxId_1, globalTxId, "service a".getBytes(), "method a")); + sagaEvents.add(txStartedEvent(globalTxId, localTxId_2, globalTxId, "service b".getBytes(), "method b")); + sagaEvents.add(txAbortedEvent(globalTxId, localTxId_2, globalTxId, NullPointerException.class.getName().getBytes(), "method b")); + sagaEvents.add(txCompensateAckTimeoutEvent(globalTxId, localTxId_2, globalTxId)); + sagaEvents.add(sagaAbortedEvent(globalTxId)); + return sagaEvents; + } + public List<GrpcTxEvent> lastTxAbortedEvents(String globalTxId, String localTxId_1, String localTxId_2, String localTxId_3){ List<GrpcTxEvent> sagaEvents = new ArrayList<>(); sagaEvents.add(sagaStartedEvent(globalTxId)); @@ -219,6 +232,13 @@ public class OmegaEventSagaSimulator { 0, 0, 0, 0); } + private GrpcTxEvent txStartedEvent(String globalTxId, + String localTxId, String parentTxId, byte[] payloads, String compensationMethod, int reverseRetries, int reverseTimeout) { + return eventOf(EventType.TxStartedEvent, globalTxId, localTxId, + parentTxId, payloads, compensationMethod, 0, "", + 0, 0, reverseRetries, reverseTimeout); + } + private GrpcTxEvent txEndedEvent(String globalTxId, String localTxId, String parentTxId, byte[] payloads, String compensationMethod) { return eventOf(EventType.TxEndedEvent, globalTxId, localTxId, @@ -247,6 +267,13 @@ public class OmegaEventSagaSimulator { 0, 0, 0, 0); } + public GrpcTxEvent txCompensateAckTimeoutEvent(String globalTxId, + String localTxId, String parentTxId) { + return eventOf(EventType.CompensateAckTimeoutEvent, globalTxId, localTxId, + parentTxId, new byte[0], "", 0, "", + 0, 0, 0, 0); + } + private GrpcTxEvent eventOf(EventType eventType, String globalTxId, String localTxId, diff --git a/pack-common/src/main/java/org/apache/servicecomb/pack/common/EventType.java b/pack-common/src/main/java/org/apache/servicecomb/pack/common/EventType.java index e585d0c..18179e3 100644 --- a/pack-common/src/main/java/org/apache/servicecomb/pack/common/EventType.java +++ b/pack-common/src/main/java/org/apache/servicecomb/pack/common/EventType.java @@ -28,5 +28,6 @@ public enum EventType { SagaTimeoutEvent, TxCompensateEvent, TxCompensateAckFailedEvent, - TxCompensateAckSucceedEvent + TxCompensateAckSucceedEvent, + CompensateAckTimeoutEvent }