|
|
@ -17,6 +17,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
package org.apache.dolphinscheduler.server.master.service; |
|
|
|
package org.apache.dolphinscheduler.server.master.service; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import io.micrometer.core.annotation.Counted; |
|
|
|
|
|
|
|
import io.micrometer.core.annotation.Timed; |
|
|
|
|
|
|
|
import lombok.NonNull; |
|
|
|
|
|
|
|
import org.apache.commons.collections4.CollectionUtils; |
|
|
|
|
|
|
|
import org.apache.commons.lang3.time.StopWatch; |
|
|
|
import org.apache.dolphinscheduler.common.Constants; |
|
|
|
import org.apache.dolphinscheduler.common.Constants; |
|
|
|
import org.apache.dolphinscheduler.common.enums.Flag; |
|
|
|
import org.apache.dolphinscheduler.common.enums.Flag; |
|
|
|
import org.apache.dolphinscheduler.common.enums.NodeType; |
|
|
|
import org.apache.dolphinscheduler.common.enums.NodeType; |
|
|
@ -31,6 +36,7 @@ import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus; |
|
|
|
import org.apache.dolphinscheduler.remote.command.TaskKillRequestCommand; |
|
|
|
import org.apache.dolphinscheduler.remote.command.TaskKillRequestCommand; |
|
|
|
import org.apache.dolphinscheduler.remote.utils.Host; |
|
|
|
import org.apache.dolphinscheduler.remote.utils.Host; |
|
|
|
import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder; |
|
|
|
import org.apache.dolphinscheduler.server.master.builder.TaskExecutionContextBuilder; |
|
|
|
|
|
|
|
import org.apache.dolphinscheduler.server.master.cache.ProcessInstanceExecCacheManager; |
|
|
|
import org.apache.dolphinscheduler.server.master.config.MasterConfig; |
|
|
|
import org.apache.dolphinscheduler.server.master.config.MasterConfig; |
|
|
|
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.ExecuteException; |
|
|
|
import org.apache.dolphinscheduler.server.master.dispatch.exceptions.ExecuteException; |
|
|
|
import org.apache.dolphinscheduler.server.master.dispatch.executor.NettyExecutorManager; |
|
|
|
import org.apache.dolphinscheduler.server.master.dispatch.executor.NettyExecutorManager; |
|
|
@ -41,9 +47,9 @@ import org.apache.dolphinscheduler.server.utils.ProcessUtils; |
|
|
|
import org.apache.dolphinscheduler.service.process.ProcessService; |
|
|
|
import org.apache.dolphinscheduler.service.process.ProcessService; |
|
|
|
import org.apache.dolphinscheduler.service.registry.RegistryClient; |
|
|
|
import org.apache.dolphinscheduler.service.registry.RegistryClient; |
|
|
|
import org.apache.dolphinscheduler.spi.utils.StringUtils; |
|
|
|
import org.apache.dolphinscheduler.spi.utils.StringUtils; |
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.apache.commons.collections4.CollectionUtils; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.apache.commons.lang3.time.StopWatch; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.Date; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
@ -51,14 +57,6 @@ import java.util.Optional; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import io.micrometer.core.annotation.Counted; |
|
|
|
|
|
|
|
import io.micrometer.core.annotation.Timed; |
|
|
|
|
|
|
|
import lombok.NonNull; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Service |
|
|
|
@Service |
|
|
|
public class MasterFailoverService { |
|
|
|
public class MasterFailoverService { |
|
|
|
|
|
|
|
|
|
|
@ -70,15 +68,19 @@ public class MasterFailoverService { |
|
|
|
|
|
|
|
|
|
|
|
private final NettyExecutorManager nettyExecutorManager; |
|
|
|
private final NettyExecutorManager nettyExecutorManager; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final ProcessInstanceExecCacheManager processInstanceExecCacheManager; |
|
|
|
|
|
|
|
|
|
|
|
public MasterFailoverService(@NonNull RegistryClient registryClient, |
|
|
|
public MasterFailoverService(@NonNull RegistryClient registryClient, |
|
|
|
@NonNull MasterConfig masterConfig, |
|
|
|
@NonNull MasterConfig masterConfig, |
|
|
|
@NonNull ProcessService processService, |
|
|
|
@NonNull ProcessService processService, |
|
|
|
@NonNull NettyExecutorManager nettyExecutorManager) { |
|
|
|
@NonNull NettyExecutorManager nettyExecutorManager, |
|
|
|
|
|
|
|
@NonNull ProcessInstanceExecCacheManager processInstanceExecCacheManager) { |
|
|
|
this.registryClient = registryClient; |
|
|
|
this.registryClient = registryClient; |
|
|
|
this.masterConfig = masterConfig; |
|
|
|
this.masterConfig = masterConfig; |
|
|
|
this.processService = processService; |
|
|
|
this.processService = processService; |
|
|
|
this.localAddress = NetUtils.getAddr(masterConfig.getListenPort()); |
|
|
|
this.localAddress = NetUtils.getAddr(masterConfig.getListenPort()); |
|
|
|
this.nettyExecutorManager = nettyExecutorManager; |
|
|
|
this.nettyExecutorManager = nettyExecutorManager; |
|
|
|
|
|
|
|
this.processInstanceExecCacheManager = processInstanceExecCacheManager; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -283,6 +285,15 @@ public class MasterFailoverService { |
|
|
|
// The processInstance is newly created
|
|
|
|
// The processInstance is newly created
|
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (processInstance.getRestartTime() != null && processInstance.getRestartTime().after(beFailoveredMasterStartupTime)) { |
|
|
|
|
|
|
|
// the processInstance is already be failovered.
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (processInstanceExecCacheManager.contains(processInstance.getId())) { |
|
|
|
|
|
|
|
// the processInstance is a running process instance in the current master
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|