Fix deadlock in master/worker caused by close method (#8361)

This commit is contained in:
Wenjun Ruan 2022-02-14 22:55:24 +08:00 committed by GitHub
parent 2f53c4f69c
commit de476edc38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 8 deletions

View File

@ -229,16 +229,17 @@ public class MasterServer implements IStoppable {
// close spring Context and will invoke method with @PreDestroy annotation to destory beans. like ServerNodeManager,HostManager,TaskResponseService,CuratorZookeeperClient,etc
springApplicationContext.close();
logger.info("springApplicationContext close");
} catch (Exception e) {
logger.error("master server stop exception ", e);
} finally {
try {
// thread sleep 60 seconds for quietly stop
Thread.sleep(60000L);
} catch (Exception e) {
logger.warn("thread sleep exception ", e);
}
System.exit(1);
// Since close will be executed in hook, so we can't use System.exit here.
Runtime.getRuntime().halt(0);
} catch (Exception e) {
logger.error("master server stop exception ", e);
Runtime.getRuntime().halt(1);
}
}

View File

@ -200,16 +200,16 @@ public class WorkerServer implements IStoppable {
this.alertClientService.close();
this.springApplicationContext.close();
logger.info("springApplicationContext close");
} catch (Exception e) {
logger.error("worker server stop exception ", e);
} finally {
try {
// thread sleep 60 seconds for quietly stop
Thread.sleep(60000L);
} catch (Exception e) {
logger.warn("thread sleep exception ", e);
}
System.exit(1);
Runtime.getRuntime().halt(0);
} catch (Exception e) {
logger.error("worker server stop exception ", e);
Runtime.getRuntime().halt(1);
}
}