|
|
@ -290,20 +290,20 @@ public class MasterRegistryClient { |
|
|
|
|
|
|
|
|
|
|
|
ProcessInstance processInstance = processService.findProcessInstanceDetailById(taskInstance.getProcessInstanceId()); |
|
|
|
ProcessInstance processInstance = processService.findProcessInstanceDetailById(taskInstance.getProcessInstanceId()); |
|
|
|
if (workerHost == null |
|
|
|
if (workerHost == null |
|
|
|
|| !checkOwner |
|
|
|
|| !checkOwner |
|
|
|
|| processInstance.getHost().equalsIgnoreCase(getLocalAddress())) { |
|
|
|
|| processInstance.getHost().equalsIgnoreCase(getLocalAddress())) { |
|
|
|
// only failover the task owned myself if worker down.
|
|
|
|
// only failover the task owned myself if worker down.
|
|
|
|
if (processInstance == null) { |
|
|
|
if (processInstance == null) { |
|
|
|
logger.error("failover error, the process {} of task {} do not exists.", |
|
|
|
logger.error("failover error, the process {} of task {} do not exists.", |
|
|
|
taskInstance.getProcessInstanceId(), taskInstance.getId()); |
|
|
|
taskInstance.getProcessInstanceId(), taskInstance.getId()); |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
taskInstance.setProcessInstance(processInstance); |
|
|
|
taskInstance.setProcessInstance(processInstance); |
|
|
|
|
|
|
|
|
|
|
|
TaskExecutionContext taskExecutionContext = TaskExecutionContextBuilder.get() |
|
|
|
TaskExecutionContext taskExecutionContext = TaskExecutionContextBuilder.get() |
|
|
|
.buildTaskInstanceRelatedInfo(taskInstance) |
|
|
|
.buildTaskInstanceRelatedInfo(taskInstance) |
|
|
|
.buildProcessInstanceRelatedInfo(processInstance) |
|
|
|
.buildProcessInstanceRelatedInfo(processInstance) |
|
|
|
.create(); |
|
|
|
.create(); |
|
|
|
// only kill yarn job if exists , the local thread has exited
|
|
|
|
// only kill yarn job if exists , the local thread has exited
|
|
|
|
ProcessUtils.killYarnJob(taskExecutionContext); |
|
|
|
ProcessUtils.killYarnJob(taskExecutionContext); |
|
|
|
|
|
|
|
|
|
|
@ -358,23 +358,40 @@ public class MasterRegistryClient { |
|
|
|
localNodePath = getMasterPath(); |
|
|
|
localNodePath = getMasterPath(); |
|
|
|
int masterHeartbeatInterval = masterConfig.getHeartbeatInterval(); |
|
|
|
int masterHeartbeatInterval = masterConfig.getHeartbeatInterval(); |
|
|
|
HeartBeatTask heartBeatTask = new HeartBeatTask(startupTime, |
|
|
|
HeartBeatTask heartBeatTask = new HeartBeatTask(startupTime, |
|
|
|
masterConfig.getMaxCpuLoadAvg(), |
|
|
|
masterConfig.getMaxCpuLoadAvg(), |
|
|
|
masterConfig.getReservedMemory(), |
|
|
|
masterConfig.getReservedMemory(), |
|
|
|
Sets.newHashSet(getMasterPath()), |
|
|
|
Sets.newHashSet(getMasterPath()), |
|
|
|
Constants.MASTER_TYPE, |
|
|
|
Constants.MASTER_TYPE, |
|
|
|
registryClient); |
|
|
|
registryClient); |
|
|
|
|
|
|
|
|
|
|
|
registryClient.persistEphemeral(localNodePath, heartBeatTask.getHeartBeatInfo()); |
|
|
|
registryClient.persistEphemeral(localNodePath, heartBeatTask.getHeartBeatInfo()); |
|
|
|
registryClient.addConnectionStateListener(newState -> { |
|
|
|
registryClient.addConnectionStateListener(this::handleConnectionState); |
|
|
|
if (newState == ConnectionState.RECONNECTED || newState == ConnectionState.SUSPENDED) { |
|
|
|
|
|
|
|
registryClient.persistEphemeral(localNodePath, ""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
this.heartBeatExecutor.scheduleAtFixedRate(heartBeatTask, masterHeartbeatInterval, masterHeartbeatInterval, TimeUnit.SECONDS); |
|
|
|
this.heartBeatExecutor.scheduleAtFixedRate(heartBeatTask, masterHeartbeatInterval, masterHeartbeatInterval, TimeUnit.SECONDS); |
|
|
|
logger.info("master node : {} registry to ZK successfully with heartBeatInterval : {}s", address, masterHeartbeatInterval); |
|
|
|
logger.info("master node : {} registry to ZK successfully with heartBeatInterval : {}s", address, masterHeartbeatInterval); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void handleConnectionState(ConnectionState state) { |
|
|
|
|
|
|
|
switch (state) { |
|
|
|
|
|
|
|
case CONNECTED: |
|
|
|
|
|
|
|
logger.debug("registry connection state is {}", state); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case SUSPENDED: |
|
|
|
|
|
|
|
logger.warn("registry connection state is {}, ready to stop myself", state); |
|
|
|
|
|
|
|
registryClient.getStoppable().stop("registry connection state is SUSPENDED, stop myself"); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case RECONNECTED: |
|
|
|
|
|
|
|
logger.debug("registry connection state is {}, clean the node info", state); |
|
|
|
|
|
|
|
registryClient.persistEphemeral(localNodePath, ""); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case DISCONNECTED: |
|
|
|
|
|
|
|
logger.warn("registry connection state is {}, ready to stop myself", state); |
|
|
|
|
|
|
|
registryClient.getStoppable().stop("registry connection state is DISCONNECTED, stop myself"); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void deregister() { |
|
|
|
public void deregister() { |
|
|
|
try { |
|
|
|
try { |
|
|
|
String address = getLocalAddress(); |
|
|
|
String address = getLocalAddress(); |
|
|
|