From 75be09735a29469ef5169550239c65a5a27af3ba Mon Sep 17 00:00:00 2001 From: Chouc <32946731+choucmei@users.noreply.github.com> Date: Fri, 4 Jun 2021 13:27:18 +0800 Subject: [PATCH] [DS-5559][fix][Master Server] Master Server was shutdown but the process still in system (#5588) * Close spring context to destory beans that has running thread --- .../dolphinscheduler/server/master/MasterServer.java | 2 ++ .../service/bean/SpringApplicationContext.java | 8 ++++++++ .../service/zk/CuratorZookeeperClient.java | 8 ++++++++ 3 files changed, 18 insertions(+) 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 016c8c980..6c15145fb 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 @@ -183,6 +183,8 @@ public class MasterServer implements IStoppable { } catch (Exception e) { logger.warn("Quartz service stopped exception:{}", e.getMessage()); } + // close spring Context and will invoke method with @PreDestroy annotation to destory beans. like ServerNodeManager,HostManager,TaskResponseService,CuratorZookeeperClient,etc + springApplicationContext.close(); } catch (Exception e) { logger.error("master server stop exception ", e); } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java index 484b837d7..61dfcb35d 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/bean/SpringApplicationContext.java @@ -20,6 +20,7 @@ package org.apache.dolphinscheduler.service.bean; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.support.AbstractApplicationContext; import org.springframework.stereotype.Component; @Component @@ -32,6 +33,13 @@ public class SpringApplicationContext implements ApplicationContextAware { SpringApplicationContext.applicationContext = applicationContext; } + /** + * Close this application context, destroying all beans in its bean factory. + */ + public void close() { + ((AbstractApplicationContext)applicationContext).close(); + } + public static T getBean(Class requiredType) { return applicationContext.getBean(requiredType); } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java index e25a22f03..a437a63b4 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/CuratorZookeeperClient.java @@ -27,6 +27,7 @@ import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.api.ACLProvider; import org.apache.curator.framework.state.ConnectionState; import org.apache.curator.retry.ExponentialBackoffRetry; +import org.apache.curator.utils.CloseableUtils; import org.apache.zookeeper.ZooDefs; import org.apache.zookeeper.data.ACL; @@ -34,6 +35,8 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.concurrent.TimeUnit; +import javax.annotation.PreDestroy; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; @@ -125,4 +128,9 @@ public class CuratorZookeeperClient implements InitializingBean { public CuratorFramework getZkClient() { return zkClient; } + + @PreDestroy + public void close() { + CloseableUtils.closeQuietly(zkClient); + } } -- GitLab