You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/09/08 03:27:21 UTC

[dubbo] branch 3.0 updated: Resource clean before destroy or stop (#8636)

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

albumenj 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 3a43fb9  Resource clean before destroy or stop (#8636)
3a43fb9 is described below

commit 3a43fb927e4c10aacd7f9a32f41c56cfc0ceec47
Author: 灼华 <43...@users.noreply.github.com>
AuthorDate: Wed Sep 8 11:27:07 2021 +0800

    Resource clean before destroy or stop (#8636)
---
 .../router/condition/config/ListenableRouter.java        |  7 +++++++
 .../mesh/route/MeshRuleAddressListenerInterceptor.java   |  7 +++++++
 .../rpc/cluster/router/mesh/route/MeshRuleManager.java   | 16 ++++++++++++++--
 .../rpc/cluster/router/tag/TagDynamicStateRouter.java    |  6 ++++++
 .../apache/dubbo/rpc/cluster/router/tag/TagRouter.java   |  6 ++++++
 5 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
index c67440d..a33f4ea 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
@@ -48,11 +48,13 @@ public abstract class ListenableRouter extends AbstractRouter implements Configu
     private static final Logger logger = LoggerFactory.getLogger(ListenableRouter.class);
     private volatile ConditionRouterRule routerRule;
     private volatile List<ConditionRouter> conditionRouters = Collections.emptyList();
+    private String ruleKey;
 
     public ListenableRouter(URL url, String ruleKey) {
         super(url);
         this.setForce(false);
         this.init(ruleKey);
+        this.ruleKey = ruleKey;
     }
 
     @Override
@@ -119,4 +121,9 @@ public abstract class ListenableRouter extends AbstractRouter implements Configu
             this.process(new ConfigChangedEvent(routerKey, DynamicConfiguration.DEFAULT_GROUP, rule));
         }
     }
+
+    @Override
+    public void stop() {
+        this.getRuleRepository().removeListener(ruleKey, this);
+    }
 }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleAddressListenerInterceptor.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleAddressListenerInterceptor.java
index 5f778bb..73b3ad2 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleAddressListenerInterceptor.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleAddressListenerInterceptor.java
@@ -50,4 +50,11 @@ public class MeshRuleAddressListenerInterceptor implements AddressListener {
 
         return addresses;
     }
+
+    @Override
+    public void destroy(URL consumerUrl, Directory registryDirectory) {
+        for (String app : APP_SET) {
+            MeshRuleManager.unsubscribeAppRule(app);
+        }
+    }
 }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java
index c64d780..702b9c7 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleManager.java
@@ -53,7 +53,7 @@ public final class MeshRuleManager {
             return;
         }
 
-        if(configuration != null) {
+        if (configuration != null) {
             try {
                 String rawConfig = configuration.getConfig(appRuleDataId, DynamicConfiguration.DEFAULT_GROUP, 5000L);
                 if (rawConfig != null) {
@@ -67,7 +67,7 @@ public final class MeshRuleManager {
         }
 
         for (MeshEnvListener envListener : envListeners) {
-            if(envListener.isEnable()) {
+            if (envListener.isEnable()) {
                 envListener.onSubscribe(app, meshAppRuleListener);
             }
         }
@@ -75,6 +75,18 @@ public final class MeshRuleManager {
         APP_RULE_LISTENERS.put(app, meshAppRuleListener);
     }
 
+    public static void unsubscribeAppRule(String app) {
+        DynamicConfiguration configuration = ApplicationModel.getEnvironment().getDynamicConfiguration()
+            .orElse(null);
+
+        String appRuleDataId = app + MESH_RULE_DATA_ID_SUFFIX;
+        MeshAppRuleListener meshAppRuleListener = APP_RULE_LISTENERS.get(app);
+
+        if (meshAppRuleListener != null && configuration != null) {
+            configuration.removeListener(appRuleDataId, DynamicConfiguration.DEFAULT_GROUP, meshAppRuleListener);
+        }
+    }
+
     public static void register(String app, MeshRuleRouter subscriber) {
         MeshAppRuleListener meshAppRuleListener = APP_RULE_LISTENERS.get(app);
         if (meshAppRuleListener == null) {
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagDynamicStateRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagDynamicStateRouter.java
index cebd0e0..5d3358f 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagDynamicStateRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagDynamicStateRouter.java
@@ -255,4 +255,10 @@ public class TagDynamicStateRouter extends AbstractStateRouter implements Config
         pool(invokers);
     }
 
+    @Override
+    public void stop() {
+        if (StringUtils.isNotEmpty(application)) {
+            ruleRepository.removeListener(application + RULE_SUFFIX, this);
+        }
+    }
 }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index e667d92..fad6636 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -255,4 +255,10 @@ public class TagRouter extends AbstractRouter implements ConfigurationListener {
         }
     }
 
+    @Override
+    public void stop() {
+        if (StringUtils.isNotEmpty(application)) {
+            this.getRuleRepository().removeListener(application + RULE_SUFFIX, this);
+        }
+    }
 }