You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2022/05/12 07:58:08 UTC

[dubbo] branch 3.0 updated: Add shutdown hook ignore support (#10029)

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 7e8c7aaca7 Add shutdown hook ignore support (#10029)
7e8c7aaca7 is described below

commit 7e8c7aaca76b0577dde10594798ee08736e0e2e4
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu May 12 15:57:49 2022 +0800

    Add shutdown hook ignore support (#10029)
---
 .../apache/dubbo/common/constants/CommonConstants.java  |  2 ++
 .../java/org/apache/dubbo/config/DubboShutdownHook.java | 17 ++++++++++++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
index 6e60942c52..861892df7f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
@@ -535,4 +535,6 @@ public interface CommonConstants {
     String NATIVE_STUB = "nativestub";
 
     String METADATA = "metadata";
+
+    String IGNORE_LISTEN_SHUTDOWN_HOOK = "dubbo.shutdownHook.listenIgnore";
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
index 9fa94b24ca..8989d882a2 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
@@ -16,6 +16,8 @@
  */
 package org.apache.dubbo.config;
 
+import org.apache.dubbo.common.config.ConfigurationUtils;
+import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.Assert;
@@ -45,16 +47,25 @@ public class DubboShutdownHook extends Thread {
      */
     private final AtomicBoolean destroyed = new AtomicBoolean(false);
 
+    /**
+     * Whether ignore listen on shutdown hook?
+     */
+    private final boolean ignoreListenShutdownHook;
+
     public DubboShutdownHook(ApplicationModel applicationModel) {
         super("DubboShutdownHook");
         this.applicationModel = applicationModel;
         Assert.notNull(this.applicationModel, "ApplicationModel is null");
+        ignoreListenShutdownHook = Boolean.parseBoolean(ConfigurationUtils.getProperty(applicationModel, CommonConstants.IGNORE_LISTEN_SHUTDOWN_HOOK));
+        if (ignoreListenShutdownHook) {
+            logger.info("dubbo.shutdownHook.listenIgnore configured, will ignore add shutdown hook to jvm.");
+        }
     }
 
     @Override
     public void run() {
 
-        if (destroyed.compareAndSet(false, true)) {
+        if (destroyed.compareAndSet(false, true) && !ignoreListenShutdownHook) {
             if (logger.isInfoEnabled()) {
                 logger.info("Run shutdown hook now.");
             }
@@ -71,7 +82,7 @@ public class DubboShutdownHook extends Thread {
      * Register the ShutdownHook
      */
     public void register() {
-        if (registered.compareAndSet(false, true)) {
+        if (registered.compareAndSet(false, true) && !ignoreListenShutdownHook) {
             try {
                 Runtime.getRuntime().addShutdownHook(this);
             } catch (IllegalStateException e) {
@@ -86,7 +97,7 @@ public class DubboShutdownHook extends Thread {
      * Unregister the ShutdownHook
      */
     public void unregister() {
-        if (registered.compareAndSet(true, false)) {
+        if (registered.compareAndSet(true, false) && !ignoreListenShutdownHook) {
             if (this.isAlive()) {
                 // DubboShutdownHook thread is running
                 return;