From 79021f384298bd9b016482cca69df3eda99ac4a1 Mon Sep 17 00:00:00 2001 From: zendwang Date: Sun, 4 Sep 2022 07:37:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?bug=20#I5PK9Q=20=E4=BC=98=E5=8C=96=E9=9A=90?= =?UTF-8?q?=E5=BC=8F=E6=B5=81=E7=A8=8B=E9=87=8C=E7=9A=84=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=BC=9A=E5=AF=BC=E8=87=B4=E4=B8=BB=E6=B5=81=E7=A8=8B=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8=E5=8F=91=E7=94=9F=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=9A=90=E5=BC=8F=E6=B5=81=E7=A8=8B=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/core/FlowExecutor.java | 6 ++-- .../liteflow/flow/LiteflowResponse.java | 7 ++-- .../yomahub/liteflow/flow/element/Chain.java | 2 +- .../java/com/yomahub/liteflow/slot/Slot.java | 32 +++++++++---------- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 3407e12da..90f65b97d 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -248,7 +248,7 @@ public class FlowExecutor { Object param, Integer slotIndex, InnerChainTypeEnum innerChainType) { Slot slot = doExecute(chainId, param, null, null, slotIndex, innerChainType); - return LiteflowResponse.newInnerResponse(slot); + return LiteflowResponse.newInnerResponse(chainId, slot); } private Slot doExecute(String chainId, @@ -288,7 +288,7 @@ public class FlowExecutor { //我知道这在多线程调用隐式流程中会有问题。但是考虑到这种场景的不会多,也有其他的转换方式。 //所以暂且这么做,以后再优化 if (!innerChainType.equals(InnerChainTypeEnum.NONE)){ - slot.removeSubException(); + slot.removeSubException(chainId); slot.addSubChain(chainId); } @@ -345,7 +345,7 @@ public class FlowExecutor { if (innerChainType.equals(InnerChainTypeEnum.NONE)) { slot.setException(e); }else{ - slot.setSubException(e); + slot.setSubException(chainId, e); } } finally { if (innerChainType.equals(InnerChainTypeEnum.NONE)) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/LiteflowResponse.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/LiteflowResponse.java index cde813132..1c90a1989 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/LiteflowResponse.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/LiteflowResponse.java @@ -1,8 +1,5 @@ package com.yomahub.liteflow.flow; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.collection.ListUtil; -import com.yomahub.liteflow.enums.InnerChainTypeEnum; import com.yomahub.liteflow.exception.LiteFlowException; import com.yomahub.liteflow.flow.entity.CmpStep; import com.yomahub.liteflow.slot.Slot; @@ -37,8 +34,8 @@ public class LiteflowResponse implements Serializable { return newResponse(slot, slot.getException()); } - public static LiteflowResponse newInnerResponse(Slot slot){ - return newResponse(slot, slot.getSubException()); + public static LiteflowResponse newInnerResponse(String chainId, Slot slot){ + return newResponse(slot, slot.getSubException(chainId)); } private static LiteflowResponse newResponse(Slot slot, Exception e){ diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java index 69b744e38..e7c4e0c1b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java @@ -90,7 +90,7 @@ public class Chain implements Executable { }catch (Exception e){ //这里事先取到exception set到slot里,为了方便finally取到exception if (slot.isSubChain(chainName)){ - slot.setSubException(e); + slot.setSubException(chainName, e); }else{ slot.setException(e); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java index 163f81363..c405a144b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java @@ -7,7 +7,6 @@ */ package com.yomahub.liteflow.slot; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ConcurrentHashSet; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; @@ -18,7 +17,11 @@ import com.yomahub.liteflow.flow.id.IdGeneratorHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Queue; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentLinkedQueue; @@ -53,7 +56,7 @@ public class Slot{ private static final String EXCEPTION = "_exception"; - private static final String SUB_EXCEPTION = "_sub_exception"; + private static final String SUB_EXCEPTION_PREFIX = "_sub_exception_"; private static final String PRIVATE_DELIVERY_PREFIX = "_private_d_"; @@ -264,16 +267,16 @@ public class Slot{ putMetaDataMap(EXCEPTION, e); } - public Exception getSubException() { - return (Exception) this.metaDataMap.get(SUB_EXCEPTION); + public Exception getSubException(String chainId) { + return (Exception) this.metaDataMap.get(SUB_EXCEPTION_PREFIX + chainId); } - public void setSubException(Exception e) { - putMetaDataMap(SUB_EXCEPTION, e); + public void setSubException(String chainId, Exception e) { + putMetaDataMap(SUB_EXCEPTION_PREFIX + chainId, e); } - public void removeSubException(){ - metaDataMap.remove(SUB_EXCEPTION); + public void removeSubException(String chainId){ + metaDataMap.remove(SUB_EXCEPTION_PREFIX + chainId); } public List getContextBeanList(){ @@ -294,14 +297,9 @@ public class Slot{ } public void addSubChain(String chainId){ - if (metaDataMap.containsKey(SUB_CHAIN)){ - Set subChainSet = (Set) metaDataMap.get(SUB_CHAIN); - subChainSet.add(chainId); - }else{ - Set subChainSet = new ConcurrentHashSet<>(); - subChainSet.add(chainId); - metaDataMap.put(SUB_CHAIN, subChainSet); - } + Set subChainSet = (Set) metaDataMap.getOrDefault(SUB_CHAIN, new ConcurrentHashSet<>()); + subChainSet.add(chainId); + metaDataMap.put(SUB_CHAIN, subChainSet); } public boolean isSubChain(String chainId){ From 4c78556517637f183228822eddb475554ad168fd Mon Sep 17 00:00:00 2001 From: zendwang Date: Sun, 4 Sep 2022 11:13:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?bug=20#I5PK9Q=20=E4=BC=98=E5=8C=96=E9=9A=90?= =?UTF-8?q?=E5=BC=8F=E6=B5=81=E7=A8=8B=E9=87=8C=E7=9A=84=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E4=BC=9A=E5=AF=BC=E8=87=B4=E4=B8=BB=E6=B5=81=E7=A8=8B=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8=E5=8F=91=E7=94=9F=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=9A=90=E5=BC=8F=E6=B5=81=E7=A8=8B=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java index c405a144b..c63c3e80d 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java @@ -299,7 +299,7 @@ public class Slot{ public void addSubChain(String chainId){ Set subChainSet = (Set) metaDataMap.getOrDefault(SUB_CHAIN, new ConcurrentHashSet<>()); subChainSet.add(chainId); - metaDataMap.put(SUB_CHAIN, subChainSet); + metaDataMap.putIfAbsent(SUB_CHAIN, subChainSet); } public boolean isSubChain(String chainId){