fix: concurrency problem when dispatch job instance

This commit is contained in:
Echo009 2021-03-08 16:34:13 +08:00
parent afff77b540
commit 375b70dd40

View File

@ -86,6 +86,12 @@ public class DispatchService {
log.info("[Dispatcher-{}|{}] cancel dispatch due to instance has been canceled", jobId, instanceId); log.info("[Dispatcher-{}|{}] cancel dispatch due to instance has been canceled", jobId, instanceId);
return; return;
} }
// 已经被派发过则不再派发
// fix 并发场景下重复派发的问题
if (instanceInfo.getStatus() != WAITING_DISPATCH.getV()) {
log.info("[Dispatcher-{}|{}] cancel dispatch due to instance has been dispatched", jobId, instanceId);
return;
}
// 任务信息已经被删除 // 任务信息已经被删除
if (jobInfo.getId() == null) { if (jobInfo.getId() == null) {
log.warn("[Dispatcher-{}|{}] cancel dispatch due to job(id={}) has been deleted!", jobId, instanceId, jobId); log.warn("[Dispatcher-{}|{}] cancel dispatch due to job(id={}) has been deleted!", jobId, instanceId, jobId);
@ -194,6 +200,7 @@ public class DispatchService {
return workerInfos.get(0); return workerInfos.get(0);
case RANDOM: case RANDOM:
return workerInfos.get(ThreadLocalRandom.current().nextInt(workerInfos.size())); return workerInfos.get(ThreadLocalRandom.current().nextInt(workerInfos.size()));
default:
} }
// impossible, indian java // impossible, indian java
return workerInfos.get(0); return workerInfos.get(0);