[Bug-8110][WorkerServer] kill all running task before worker stop (#8490)
* kill all running task before worker stop * kill local process * remove kill yarn job * adjust the orders of close Co-authored-by: caishunfeng <534328519@qq.com>ui-next
parent
512f8cb5dd
commit
f2b9796bc2
|
|
@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.spi.task;
|
|||
|
||||
import org.apache.dolphinscheduler.spi.task.request.TaskRequest;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
|
@ -66,4 +67,8 @@ public class TaskExecutionContextCacheManager {
|
|||
taskRequestContextCache.computeIfPresent(request.getTaskInstanceId(), (k, v) -> request);
|
||||
return taskRequestContextCache.containsKey(request.getTaskInstanceId());
|
||||
}
|
||||
|
||||
public static Collection<TaskRequest> getAllTaskRequestList() {
|
||||
return taskRequestContextCache.values();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,12 @@ import org.apache.dolphinscheduler.server.worker.runner.RetryReportTaskStatusThr
|
|||
import org.apache.dolphinscheduler.server.worker.runner.WorkerManagerThread;
|
||||
import org.apache.dolphinscheduler.service.alert.AlertClientService;
|
||||
import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
|
||||
import org.apache.dolphinscheduler.spi.task.TaskExecutionContextCacheManager;
|
||||
import org.apache.dolphinscheduler.spi.task.request.TaskRequest;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
|
@ -201,6 +206,11 @@ public class WorkerServer implements IStoppable {
|
|||
this.nettyRemotingServer.close();
|
||||
this.workerRegistryClient.unRegistry();
|
||||
this.alertClientService.close();
|
||||
|
||||
// kill running tasks
|
||||
this.killAllRunningTasks();
|
||||
|
||||
// close the application context
|
||||
this.springApplicationContext.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("worker server stop exception ", e);
|
||||
|
|
@ -211,4 +221,21 @@ public class WorkerServer implements IStoppable {
|
|||
public void stop(String cause) {
|
||||
close(cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* kill all tasks which are running
|
||||
*/
|
||||
public void killAllRunningTasks() {
|
||||
Collection<TaskRequest> taskRequests = TaskExecutionContextCacheManager.getAllTaskRequestList();
|
||||
logger.info("ready to kill all cache job, job size:{}", taskRequests.size());
|
||||
|
||||
if (CollectionUtils.isEmpty(taskRequests)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (TaskRequest taskRequest : taskRequests) {
|
||||
// kill task when it's not finished yet
|
||||
org.apache.dolphinscheduler.plugin.task.api.ProcessUtils.kill(taskRequest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue