feature #IAY66T 完善代码

This commit is contained in:
DaleLee
2025-03-22 17:39:12 +08:00
parent d6a66dafd7
commit 3e3175fdb1
3 changed files with 18 additions and 10 deletions

View File

@@ -661,7 +661,10 @@ public class FlowExecutor {
boolean exist = lifeCycleList.stream()
.anyMatch(lifeCycle -> lifeCycle instanceof RuleCacheLifeCycle);
if (!exist) {
RuleCacheLifeCycle.initIfAbsent(capacity);
boolean success = RuleCacheLifeCycle.initIfAbsent(capacity);
if (!success) {
throw new FlowExecutorNotInitException("Initialization of RuleCacheLifeCycle failed");
}
LifeCycleHolder.addLifeCycle(RuleCacheLifeCycle.getLifeCycle());
}
@@ -679,7 +682,8 @@ public class FlowExecutor {
int chainNum = FlowBus.getChainMap().size();
double threshold = chainNum * 0.3;
if (capacity < threshold) {
LOG.warn("The rule cache capacity {} is too small, it is recommended to be greater than 30% of the number of chains", capacity);
LOG.warn("The rule cache capacity {} is too small, the current total number of chains is {}, "
+"it is recommended to be greater than 30% of the number of chains", capacity, chainNum);
}
}
}

View File

@@ -11,6 +11,7 @@ package com.yomahub.liteflow.flow.element;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
import com.yomahub.liteflow.common.ChainConstant;
import com.yomahub.liteflow.enums.ExecuteableTypeEnum;
@@ -108,10 +109,10 @@ public class Chain implements Executable{
// 因为在正式执行condition之前this.conditionList有可能被其他线程置空
// 比如该chain在规则缓存中被淘汰
List<Condition> conditionListRef = this.conditionList;
// 但在编译后到拿到引用之前this.conditionList可能已经被置空了
// 但在编译后到拿到引用之前this.conditionList还是有可能已经被置空了
if (CollUtil.isEmpty(conditionListRef)) {
// 如果conditionListRef为空
// 构建临时conditionList确保本次一定可以执行
// 尝试构建临时conditionList确保本次一定可以执行
conditionListRef = buildTemporaryConditionList();
}
Slot slot = DataBus.getSlot(slotIndex);
@@ -248,6 +249,10 @@ public class Chain implements Executable{
// 构建临时的ConditionList
private List<Condition> buildTemporaryConditionList() {
if (StrUtil.isBlank(el)) {
// 无法构建
throw new FlowSystemException("no conditionList in this chain[" + chainId + "]");
}
// 构建临时chain
String tempChainId = chainId + "_temp_" + IdUtil.simpleUUID();
Chain tempChain = new Chain(tempChainId);
@@ -261,10 +266,6 @@ public class Chain implements Executable{
// 移除临时chain
FlowBus.removeChain(tempChainId);
if (CollUtil.isEmpty(tempConditionList)) {
throw new FlowSystemException("no conditionList in this chain[" + chainId + "]");
}
// 打印警告可用于排查临时chain与已有chain重名几乎不可能发生而将已有chain覆盖的情况
LOG.warn("The conditionList of chain[{}] is empty, " +
"temporarily using chain[{}] (now removed) to build it.", chainId, tempChainId);

View File

@@ -48,7 +48,7 @@ public class RuleCacheLifeCycle implements PostProcessChainExecuteLifeCycle {
@Override
public void postProcessAfterChainExecute(String chainId, Slot slot) {
// 不在缓存中、或于非活跃状态,但未被清理
// 检测是否有不在缓存中、或于非活跃状态未被清理的 Chain
if (!isActive(chainId) && !isCleaned(chainId)) {
cleanChain(chainId);
}
@@ -155,11 +155,14 @@ public class RuleCacheLifeCycle implements PostProcessChainExecuteLifeCycle {
/**
* 初始化生命周期实例
* @param capacity 缓存容量
* @return 成功 true失败返回 false
*/
public synchronized static void initIfAbsent(int capacity) {
public synchronized static boolean initIfAbsent(int capacity) {
if (ObjectUtil.isNull(INSTANCE)) {
INSTANCE = new RuleCacheLifeCycle(capacity);
return true;
}
return false;
}
/**