From 6dbae72238b53c98b2c1bc6c631b3a81cc2ce97e Mon Sep 17 00:00:00 2001 From: rain <672378783@qq.com> Date: Sat, 28 Oct 2023 16:36:55 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E4=BC=9A=E5=A4=9A=E6=AC=A1rollback=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/core/NodeComponent.java | 9 +++++- .../RollbackELDeclMultiSpringbootTest.java | 8 +++++ .../liteflow/test/rollback/cmp/CmpConfig.java | 29 +++++++++++++++++++ .../src/test/resources/rollback/flow.el.xml | 4 +++ .../RollbackELDeclSpringbootTest.java | 8 +++++ .../src/test/resources/rollback/flow.el.xml | 4 +++ .../liteflow/test/rollback/RollbackTest.java | 8 +++++ .../src/test/resources/rollback/flow.el.xml | 6 ++++ .../test/rollback/RollbackSpringbootTest.java | 8 +++++ .../src/test/resources/rollback/flow.el.xml | 4 +++ .../test/rollback/RollbackSpringbootTest.java | 10 +++++++ .../liteflow/test/rollback/cmp/MCmp.java | 25 ++++++++++++++++ .../liteflow/test/rollback/cmp/NCmp.java | 20 +++++++++++++ .../src/test/resources/rollback/flow.el.xml | 4 +++ .../test/rollback/RollbackSpringTest.java | 8 +++++ .../liteflow/test/rollback/cmp/MCmp.java | 25 ++++++++++++++++ .../liteflow/test/rollback/cmp/NCmp.java | 20 +++++++++++++ .../src/test/resources/rollback/flow.el.xml | 4 +++ 18 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index 55fe2e528..bd67c1831 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -7,6 +7,7 @@ */ package com.yomahub.liteflow.core; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.StopWatch; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -32,6 +33,7 @@ import com.yomahub.liteflow.monitor.CompStatistics; import com.yomahub.liteflow.monitor.MonitorBus; import java.lang.reflect.Method; +import java.util.Deque; import java.util.Map; /** @@ -156,10 +158,15 @@ public abstract class NodeComponent { public void doRollback() throws Exception { Slot slot = this.getSlot(); - + Deque rollbackSteps = slot.getRollbackSteps(); + if(!CollUtil.isEmpty(rollbackSteps)) { + Node refNode = rollbackSteps.peekLast().getRefNode(); + if(refNode == this.getRefNode()) return; + } CmpStep cmpStep = new CmpStep(nodeId, name, CmpStepTypeEnum.SINGLE); cmpStep.setTag(this.getTag()); cmpStep.setInstance(this); + cmpStep.setRefNode(this.getRefNode()); slot.addRollbackStep(cmpStep); StopWatch stopWatch = new StopWatch(); diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java index 022dc9aec..8fcc1c34b 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclMultiSpringbootTest.java @@ -100,4 +100,12 @@ public class RollbackELDeclMultiSpringbootTest extends BaseTest { Assertions.assertEquals("321", context.getData("test")); } + @Test + // 对重试的测试 + public void testRetry() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg"); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("n==>m", response.getRollbackStepStr()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java index 1c1e43ad8..b88545014 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/CmpConfig.java @@ -3,6 +3,7 @@ package com.yomahub.liteflow.test.rollback.cmp; import cn.hutool.core.collection.ListUtil; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.annotation.LiteflowRetry; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.enums.LiteFlowMethodEnum; import com.yomahub.liteflow.enums.NodeTypeEnum; @@ -145,4 +146,32 @@ public class CmpConfig { System.out.println("XCmp rollback!"); } + private int flag = 0; + @LiteflowRetry(5) + @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "m") + public void processM(NodeComponent bindCmp) { + if(flag < 2) { + flag ++; + throw new RuntimeException(); + } + System.out.println("MCmp executed!"); + } + + @LiteflowMethod(value = LiteFlowMethodEnum.ROLLBACK, nodeId = "m") + public void rollbackM() throws Exception { + System.out.println("MCmp rollback!"); + } + + @LiteflowRetry(3) + @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "n") + public void processN(NodeComponent bindCmp) { + System.out.println("NCmp executed!"); + throw new RuntimeException(); + } + + @LiteflowMethod(value = LiteFlowMethodEnum.ROLLBACK, nodeId = "n") + public void rollbackN() throws Exception { + System.out.println("NCmp rollback!"); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml index 887403167..a6db91b48 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/resources/rollback/flow.el.xml @@ -35,4 +35,8 @@ THEN(a.tag("1"), a.tag("2"), a.tag("3"), d); + + + THEN( m, n ); + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java index c89f3c72c..952c8567e 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackELDeclSpringbootTest.java @@ -102,4 +102,12 @@ public class RollbackELDeclSpringbootTest extends BaseTest { Assertions.assertEquals("321", context.getData("test")); } + @Test + // 对重试的测试 + public void testRetry() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg"); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("n==>m", response.getRollbackStepStr()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml index 2e46ba7af..8ab1a1403 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/rollback/flow.el.xml @@ -35,4 +35,8 @@ THEN(a.tag("1"), a.tag("2"), a.tag("3"), d); + + + THEN( m, n ); + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java index f8d58918e..97498e070 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/RollbackTest.java @@ -99,4 +99,12 @@ public class RollbackTest extends BaseTest { Assertions.assertEquals("321", context.getData("test")); } + @Test + // 对重试的测试 + public void testRetry() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg"); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("n==>m", response.getRollbackStepStr()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml index 7072cf2b9..da327932d 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/rollback/flow.el.xml @@ -12,6 +12,8 @@ + + THEN( a, b, WHEN(c, d).ignoreError(true), CATCH(e) ); @@ -48,4 +50,8 @@ THEN(a.tag("1"), a.tag("2"), a.tag("3"), d); + + + THEN( m, n ); + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java index 07d7486f6..fdaa63d62 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java @@ -94,4 +94,12 @@ public class RollbackSpringbootTest extends BaseTest { Assertions.assertEquals("321", context.getData("test")); } + @Test + // 对重试的测试 + public void testRetry() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg"); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("n==>m", response.getRollbackStepStr()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml index 2e46ba7af..8ab1a1403 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/resources/rollback/flow.el.xml @@ -35,4 +35,8 @@ THEN(a.tag("1"), a.tag("2"), a.tag("3"), d); + + + THEN( m, n ); + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java index 8e230f7fa..133806e92 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringbootTest.java @@ -2,6 +2,8 @@ package com.yomahub.liteflow.test.rollback; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.slot.DefaultContext; import com.yomahub.liteflow.test.BaseTest; import org.junit.jupiter.api.Assertions; @@ -97,4 +99,12 @@ public class RollbackSpringbootTest extends BaseTest { Assertions.assertFalse(response.isSuccess()); Assertions.assertEquals("321", context.getData("test")); } + + @Test + // 对重试的测试 + public void testRetry() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg"); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("n==>m", response.getRollbackStepStr()); + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java new file mode 100644 index 000000000..975de743c --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java @@ -0,0 +1,25 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("m") +@LiteflowRetry(5) +public class MCmp extends NodeComponent { + + private int flag = 0; + @Override + public void process() { + if(flag < 2) { + flag ++; + throw new RuntimeException(); + } + System.out.println("MCmp executed!"); + } + + @Override + public void rollback() throws Exception { + System.out.println("MCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java new file mode 100644 index 000000000..65d509968 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java @@ -0,0 +1,20 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("n") +@LiteflowRetry(3) +public class NCmp extends NodeComponent { + @Override + public void process() { + System.out.println("NCmp executed!"); + throw new RuntimeException(); + } + + @Override + public void rollback() throws Exception { + System.out.println("NCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml index 2e46ba7af..8ab1a1403 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/rollback/flow.el.xml @@ -35,4 +35,8 @@ THEN(a.tag("1"), a.tag("2"), a.tag("3"), d); + + + THEN( m, n ); + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java index e4b08ccc9..59a4e6160 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/RollbackSpringTest.java @@ -95,5 +95,13 @@ public class RollbackSpringTest extends BaseTest { Assertions.assertEquals("321", context.getData("test")); } + @Test + // 对重试的测试 + public void testRetry() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain10", "arg"); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals("n==>m", response.getRollbackStepStr()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java new file mode 100644 index 000000000..975de743c --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java @@ -0,0 +1,25 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("m") +@LiteflowRetry(5) +public class MCmp extends NodeComponent { + + private int flag = 0; + @Override + public void process() { + if(flag < 2) { + flag ++; + throw new RuntimeException(); + } + System.out.println("MCmp executed!"); + } + + @Override + public void rollback() throws Exception { + System.out.println("MCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java new file mode 100644 index 000000000..65d509968 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java @@ -0,0 +1,20 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("n") +@LiteflowRetry(3) +public class NCmp extends NodeComponent { + @Override + public void process() { + System.out.println("NCmp executed!"); + throw new RuntimeException(); + } + + @Override + public void rollback() throws Exception { + System.out.println("NCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml index 2e46ba7af..8ab1a1403 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/rollback/flow.el.xml @@ -35,4 +35,8 @@ THEN(a.tag("1"), a.tag("2"), a.tag("3"), d); + + + THEN( m, n ); + \ No newline at end of file -- Gitee From 470cb3c5b9ee1bac1f0b9144a5421834c3b4e1cd Mon Sep 17 00:00:00 2001 From: rain <672378783@qq.com> Date: Mon, 30 Oct 2023 14:28:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E4=BC=9A=E5=A4=9A=E6=AC=A1rollback=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/yomahub/liteflow/core/NodeComponent.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index bd67c1831..7fcdd1d79 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -160,8 +160,10 @@ public abstract class NodeComponent { Slot slot = this.getSlot(); Deque rollbackSteps = slot.getRollbackSteps(); if(!CollUtil.isEmpty(rollbackSteps)) { - Node refNode = rollbackSteps.peekLast().getRefNode(); - if(refNode == this.getRefNode()) return; + for (CmpStep rollbackStep : rollbackSteps) { + Node refNode = rollbackStep.getRefNode(); + if(refNode == this.getRefNode()) return; + } } CmpStep cmpStep = new CmpStep(nodeId, name, CmpStepTypeEnum.SINGLE); cmpStep.setTag(this.getTag()); -- Gitee