dromara / liteflow

Lightweight, fast, stable, and programmable component-based rule engine/process engine. Component reuse, synchronous/asynchronous orchestration, dynamic orchestration, multi-language scripting support, complex nested rules, hot deployment, smooth refreshing. Let you improve your development efficiency!
Apache License 2.0
3.04k stars 424 forks source link

关于FlowExecutor 填充元数据后,重新获取数据后,产生数据丢失和线程不安全的问题 #46

Open CALLEVE opened 1 year ago

CALLEVE commented 1 year ago

我这边在使用 liteflow时 遇到一个问题 基于 liteflow-core 2.6.7 如上图 线程 29 和 30 在 FlowExecutor 装填参数的 时候 row 都是有值 ,而在 ActionComponent(NodeComponent的实现类)中获取到 slot.getRequestData() 的时候 ,row被置空了 而且 线程29 和 线程30 ,数据被污染了(被覆盖了),现象是随机出现的,同样的数据 前一次可能失败,后面的都是成功的 ,问题的发生没有规律性 请问 有遇到过这个情况吗? 微信图片_20230911134425 微信图片_20230911134425_1

关于日志是输出的补充

2023-09-11 13:11:11.238 INFO 16704 [http-nio-9003-exec-30] com.yomahub.liteflow.core.FlowExecutor slot[0] offered 2023-09-11 13:11:11.239 INFO 16704 [http-nio-9003-exec-29] com.yomahub.liteflow.core.FlowExecutor slot[0] offered 2023-09-11 13:11:11.239 INFO 16704 [http-nio-9003-exec-29] com.yomahub.liteflow.core.FlowExecutor requestId[zXVPZq4wdi8RqBrmwedJk] has generated 2023-09-11 13:11:11.239 INFO 16704 [http-nio-9003-exec-30] com.yomahub.liteflow.core.FlowExecutor requestId[EX9O89VV33A2agXpS5tmF] has generated

线程 29 和 30 生成的requestId 是不同的 但是 在slot 槽位的获取上,却同时获取到了 slot[0]