Fix the waiting strategy cannot recovery if the serverstate is already in running (#12651)

This commit is contained in:
Wenjun Ruan 2022-11-02 14:06:01 +08:00 committed by zhuangchong
parent 135d70da09
commit 9957df1c41
2 changed files with 12 additions and 7 deletions

View File

@ -18,7 +18,9 @@
package org.apache.dolphinscheduler.common.lifecycle;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@UtilityClass
public class ServerLifeCycleManager {
@ -52,20 +54,24 @@ public class ServerLifeCycleManager {
throw new ServerLifeCycleException("The current server is already stopped, cannot change to waiting");
}
if (serverStatus != ServerStatus.RUNNING) {
throw new ServerLifeCycleException("The current server is not at running status, cannot change to waiting");
if (serverStatus == ServerStatus.WAITING) {
log.warn("The current server is already at waiting status, cannot change to waiting");
return;
}
serverStatus = ServerStatus.WAITING;
}
/**
* Recover from {@link ServerStatus#WAITING} to {@link ServerStatus#RUNNING}.
*
* @throws ServerLifeCycleException if change failed
*/
public static synchronized void recoverFromWaiting() throws ServerLifeCycleException {
if (serverStatus != ServerStatus.WAITING) {
throw new ServerLifeCycleException("The current server status is not waiting, cannot recover form waiting");
if (isStopped()) {
throw new ServerLifeCycleException("The current server is already stopped, cannot recovery");
}
if (serverStatus == ServerStatus.RUNNING) {
log.warn("The current server status is already running, cannot recover form waiting");
return;
}
serverStartupTime = System.currentTimeMillis();
serverStatus = ServerStatus.RUNNING;

View File

@ -63,7 +63,6 @@ public class MasterWaitingStrategy implements MasterConnectStrategy {
public void disconnect() {
try {
ServerLifeCycleManager.toWaiting();
// todo: clear the current resource
clearMasterResource();
Duration maxWaitingTime = masterConfig.getRegistryDisconnectStrategy().getMaxWaitingTime();
try {