From 95cdb9ca6814d133b35ea99238706fa5d9a9e73b Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Tue, 31 Oct 2023 00:11:54 +0800 Subject: [PATCH] =?UTF-8?q?bug=20#I8AR0L=20=E7=BB=84=E4=BB=B6=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E4=BA=86=E9=87=8D=E8=AF=95=E5=92=8C=E5=9B=9E=E6=BB=9A?= =?UTF-8?q?=EF=BC=8C=E5=9B=9E=E6=BB=9A=E4=B9=9F=E4=BC=9A=E8=A2=AB=E9=87=8D?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/core/NodeComponent.java | 12 ++++----- .../liteflow/test/rollback/cmp/MCmp.java | 25 +++++++++++++++++++ .../liteflow/test/rollback/cmp/NCmp.java | 20 +++++++++++++++ .../liteflow/test/rollback/cmp/MCmp.java | 23 +++++++++++++++++ .../liteflow/test/rollback/cmp/NCmp.java | 18 +++++++++++++ 5 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/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 7fcdd1d79..5d8c81c70 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 @@ -35,6 +35,7 @@ import com.yomahub.liteflow.monitor.MonitorBus; import java.lang.reflect.Method; import java.util.Deque; import java.util.Map; +import java.util.function.Predicate; /** * 普通组件抽象类 @@ -158,13 +159,12 @@ public abstract class NodeComponent { public void doRollback() throws Exception { Slot slot = this.getSlot(); - Deque rollbackSteps = slot.getRollbackSteps(); - if(!CollUtil.isEmpty(rollbackSteps)) { - for (CmpStep rollbackStep : rollbackSteps) { - Node refNode = rollbackStep.getRefNode(); - if(refNode == this.getRefNode()) return; - } + + boolean alreadyRollback = slot.getRollbackSteps().stream().anyMatch(cmpStep -> cmpStep.getRefNode().equals(getRefNode())); + if (alreadyRollback){ + return; } + CmpStep cmpStep = new CmpStep(nodeId, name, CmpStepTypeEnum.SINGLE); cmpStep.setTag(this.getTag()); cmpStep.setInstance(this); diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-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-declare-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-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-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-declare-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-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java new file mode 100644 index 000000000..da538e236 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java @@ -0,0 +1,23 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; + +@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-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java new file mode 100644 index 000000000..66d51ef08 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java @@ -0,0 +1,18 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; + +@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!"); + } +}