alei1206 commented on PR #14664: URL: https://github.com/apache/dolphinscheduler/pull/14664#issuecomment-1660073073
> 从我的观点来看,首先c1节点的某条分支是非执行时,并且这条非执行分支上有condition 节点(以下成为c2),并且这个c2节点是或的关系。我会做以下操作 1.当或的条件没有全部判断完毕,我不会将c2 放入skip 节点 2.在c2 节点信息上加入c2所依赖的各个dependNode的状态,例如c2节点依赖c1节点的那条分支是不执行的,我就设该dependNode 为false 3.当c2 所依赖的dependNode全为false时,放入skipNodeList > > ``` > From my point of view, first of all, a branch of the c1 node is non-executable, and there is a condition node (hereinafter referred to as c2) on this non-executive branch, and this c2 node is an or relationship. I would do the following > 1. I will not put c2 into the skip node when all the conditions of or have not been judged > 2. Add the status of each dependNode that c2 depends on to the c2 node information. For example, the branch where c2 node depends on c1 node is not executed, so I set the dependNode to false > 3. When the dependNodes that c2 depends on are all false, put them into skipNodeList > ``` > > hi @alei1206 WDYT ? cc @Radeity  @fuchanghai 你好,这部分我有其他看法,我认为这个问题的原因是特殊场景下c2无法被提交执行,而不是c2是否加入到skipNodeList的问题。如图(s1是sleep 30s, s7是sleep 10s),在此场景下,c2是不会被放入skipNodeList。当s7执行结束时,由于s1处于running状态,所以c2的dependNodes未完成,不会被提交执行。当s1完成后,会将s4放入到skipNodeList,DolphinScheduler只会检查c2节点是否需要被放入skipNodeList,而不会检查是否需要执行,造成c2无法被提交执行。我所做的是获取c1之后所有被跳过的节点,然后判断被跳过节点后面是否存在Condition类型任务(如c2)。如果有则将其加入到队列并尝试提交执行。如果c2不满足执行条件,则在后续逻辑中会被移除队列。 > -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
