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 421f96038121c444de35da13f0ad9643f223f114 Author: Lei Zhang <[email protected]> AuthorDate: Wed Jul 3 09:18:30 2019 +0800 SCB-1321 Add test case duplicateTxOnFailureEvents --- .../alpha/server/fsm/AlphaIntegrationFsmTest.java | 35 ++++++++++++++++++++-- .../alpha/server/fsm/OmegaEventSagaSimulator.java | 14 +++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) 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 d4d3e99..b366c53 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 @@ -93,10 +93,14 @@ public class AlphaIntegrationFsmTest { omegaEventSender.getOmegaEventSagaSimulator().sagaSuccessfulEvents(globalTxId, localTxId_1, localTxId_2, localTxId_3).stream().forEach( event -> { omegaEventSender.getBlockingStub().onTxEvent(event); }); - await().atMost(1, SECONDS).until(() -> omegaEventSender.getOmegaCallbacks() != null); - await().atMost(1, SECONDS).until(() -> SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system).getSagaData(globalTxId) != null); + await().atMost(1, SECONDS).until(() -> { + SagaData sagaData = SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system).getSagaData(globalTxId); + return sagaData !=null && sagaData.getLastState()==SagaActorState.COMMITTED; + }); + + //await().atMost(1, SECONDS).until(() -> SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system).getSagaData(globalTxId) != null); SagaData sagaData = SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system).getSagaData(globalTxId); - Assert.assertEquals(sagaData.getLastState(),SagaActorState.COMMITTED); + //Assert.assertEquals(sagaData.getLastState(),SagaActorState.COMMITTED); Assert.assertEquals(sagaData.getTxEntityMap().size(),3); Assert.assertTrue(sagaData.getBeginTime() > 0); Assert.assertTrue(sagaData.getEndTime() > 0); @@ -345,4 +349,29 @@ public class AlphaIntegrationFsmTest { Assert.assertEquals(sagaData.getTxEntityMap().get(localTxId_2).getState(),TxState.COMPENSATED); Assert.assertEquals(sagaData.getTxEntityMap().get(localTxId_3).getState(),TxState.FAILED); } + + @Test + public void doNotCompensateDuplicateTxOnFailure() { + omegaEventSender.onConnected(); + final String globalTxId = UUID.randomUUID().toString(); + final String localTxId_1 = UUID.randomUUID().toString(); + final String localTxId_2 = UUID.randomUUID().toString(); + final String localTxId_3 = UUID.randomUUID().toString(); + omegaEventSender.getOmegaEventSagaSimulator().duplicateTxOnFailureEvents(globalTxId, localTxId_1, localTxId_2, localTxId_3).stream().forEach( event -> { + omegaEventSender.getBlockingStub().onTxEvent(event); + }); + await().atMost(1, SECONDS).until(() -> { + SagaData sagaData = SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system).getSagaData(globalTxId); + return sagaData !=null && sagaData.getLastState()==SagaActorState.COMPENSATED; + }); + SagaData sagaData = SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER.get(system).getSagaData(globalTxId); + Assert.assertEquals(sagaData.getLastState(),SagaActorState.COMPENSATED); + Assert.assertEquals(sagaData.getTxEntityMap().size(),3); + Assert.assertTrue(sagaData.getBeginTime() > 0); + Assert.assertTrue(sagaData.getEndTime() > 0); + Assert.assertTrue(sagaData.getEndTime() > sagaData.getBeginTime()); + Assert.assertEquals(sagaData.getTxEntityMap().get(localTxId_1).getState(),TxState.COMPENSATED); + Assert.assertEquals(sagaData.getTxEntityMap().get(localTxId_2).getState(),TxState.COMPENSATED); + Assert.assertEquals(sagaData.getTxEntityMap().get(localTxId_3).getState(),TxState.FAILED); + } } 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 22b5cac..8623953 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 @@ -164,6 +164,20 @@ public class OmegaEventSagaSimulator { return sagaEvents; } + public List<GrpcTxEvent> duplicateTxOnFailureEvents(String globalTxId, String localTxId_1, String localTxId_2, String localTxId_3){ + List<GrpcTxEvent> sagaEvents = new ArrayList<>(); + sagaEvents.add(sagaStartedEvent(globalTxId)); + sagaEvents.add(txStartedEvent(globalTxId, localTxId_1, globalTxId, "service a".getBytes(), "method a")); + sagaEvents.add(txEndedEvent(globalTxId, localTxId_1, globalTxId, "service a".getBytes(), "method a")); + 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(txEndedEvent(globalTxId, localTxId_2, globalTxId, "service b".getBytes(), "method b")); + sagaEvents.add(txStartedEvent(globalTxId, localTxId_3, globalTxId, "service c".getBytes(), "method c")); + sagaEvents.add(txAbortedEvent(globalTxId, localTxId_3, globalTxId, "service c".getBytes(), "method c")); + sagaEvents.add(sagaAbortedEvent(globalTxId)); + return sagaEvents; + } + private GrpcTxEvent sagaStartedEvent(String globalTxId) { return eventOf(EventType.SagaStartedEvent, globalTxId, globalTxId, null, new byte[0], "", 0, "",
