一个任务并发调度到执行器执行时,大概率有一个会回调失败,[job running, killed],初步分析是这个代码导致JobThread oldJobThread = jobThreadRepository.put(jobId, newJobThread); // putIfAbsent | oh my god, map's put method return the old value!!! if (oldJobThread != null) { oldJobThread.toStop(removeOldReason); oldJobThread.interrupt(); }
有一个会stop掉导致,有没有遇到过的请教下
5条答案
按热度按时间gajydyqb1#
把这块oldJobThread的判断执行逻辑去掉,先不要stop掉,让空闲超时30s自行停止,这样应该没什么问题。按理说应该要让之前的任务执行完,而不是强行停止,不知道这样理解可行?
htrmnn0y2#
请问你这个并发场景是怎么造成的?
e5nqia273#
请问你这个并发场景是怎么造成的?
有二次开发过,比如接口开发调用,可以模拟出来,正常情况下应该是概率极低的
zmeyuzjn4#
@wu-xin@wangchao550586585@xuxueli 请问 @wu-xin 提的这个现象是执行器没有考虑到同一任务并发问题吗? 我们也遇到过。
ntjbwcob5#
我们也有遇到,而且没有进行二次开发,只是在执行分片广播后的子任务因为重复了而被interrupt,这应该是个bug吧,不修吗?