bug #IC71HA 在线程1的执行过程中线程2去remove chain导致的线程1无法平滑继续执行的bug

This commit is contained in:
everywhere.z
2025-05-12 13:11:23 +08:00
parent a8cdbfbb48
commit 282721a321
5 changed files with 31 additions and 10 deletions

View File

@@ -120,8 +120,9 @@ public class Chain implements Executable{
);
}
// 设置主ChainName
// 设置主ChainId
slot.setChainId(chainId);
slot.addChainInstance(this);
// 执行主体Condition
for (Condition condition : conditionList) {
condition.setCurrChainId(chainId);

View File

@@ -45,7 +45,7 @@ public abstract class Condition implements Executable{
private final Map<String, List<Executable>> executableGroup = new HashMap<>();
/**
* 当前所在的ChainName 如果对于子流程来说那这个就是子流程所在的Chain
* 当前所在的ChainId 如果对于子流程来说那这个就是子流程所在的Chain
*/
private String currChainId;

View File

@@ -16,12 +16,12 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.yomahub.liteflow.exception.NoSuchContextBeanException;
import com.yomahub.liteflow.exception.NullParamException;
import com.yomahub.liteflow.flow.element.Chain;
import com.yomahub.liteflow.flow.element.Condition;
import com.yomahub.liteflow.flow.entity.CmpStep;
import com.yomahub.liteflow.flow.id.IdGeneratorHolder;
import com.yomahub.liteflow.log.LFLog;
import com.yomahub.liteflow.log.LFLoggerManager;
import com.yomahub.liteflow.property.LiteflowConfigGetter;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -46,7 +46,9 @@ public class Slot {
private static final String RESPONSE = "_response";
private static final String CHAIN_NAME = "_chain_name";
private static final String CHAIN_ID = "_chain_id";
private static final String CHAIN_INSTANCE = "_chain_instance";
private static final String SWITCH_NODE_PREFIX = "_switch_";
@@ -326,13 +328,31 @@ public class Slot {
}
public void setChainId(String chainId) {
if (!hasMetaData(CHAIN_NAME)) {
this.putMetaDataMap(CHAIN_NAME, chainId);
if (!hasMetaData(CHAIN_ID)) {
this.putMetaDataMap(CHAIN_ID, chainId);
}
}
public String getChainId() {
return (String) metaDataMap.get(CHAIN_NAME);
return (String) metaDataMap.get(CHAIN_ID);
}
public void addChainInstance(Chain chain){
if (!hasMetaData(CHAIN_INSTANCE)) {
this.putMetaDataMap(CHAIN_INSTANCE, ListUtil.toList(chain));
}else{
List<Chain> list = (List<Chain>) metaDataMap.get(CHAIN_INSTANCE);
list.add(chain);
}
}
public Chain getCurrentChainInstance(String currentChainId){
if (hasMetaData(CHAIN_INSTANCE)) {
List<Chain> list = (List<Chain>) metaDataMap.get(CHAIN_INSTANCE);
return list.stream().filter(chain -> chain.getId().equals(currentChainId)).findFirst().orElse(null);
}else{
return null;
}
}
public void addStep(CmpStep step) {

View File

@@ -185,8 +185,8 @@ public class ExecutorHelper {
public ExecutorService buildExecutorService(Condition condition, Integer slotIndex, ConditionTypeEnum type) {
ExecutorService executor;
LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
String chainId = DataBus.getSlot(slotIndex).getChainId();
Chain chain = FlowBus.getChain(chainId);
String currChainId = condition.getCurrChainId();
Chain chain = DataBus.getSlot(slotIndex).getCurrentChainInstance(currChainId);
// 构建条件判断对象
ExecutorCondition execCondition = ExecutorConditionBuilder.buildExecutorCondition(

View File

@@ -39,7 +39,7 @@
</scm>
<properties>
<revision>2.13.2</revision>
<revision>2.13.2.1</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>8</maven.compiler.source>