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);
+ }
+ }
}