From de476edc38d7ef7cd68c8f3c5a23406ddfc424b8 Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Mon, 14 Feb 2022 22:55:24 +0800 Subject: [PATCH] Fix deadlock in master/worker caused by close method (#8361) --- .../dolphinscheduler/server/master/MasterServer.java | 9 +++++---- .../dolphinscheduler/server/worker/WorkerServer.java | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java index 179b70210d..bf4e3c03a5 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/MasterServer.java @@ -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); } } diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java index ff0067cb29..f1fe3b1520 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java @@ -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); } }