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 7eabceeb94 fixes #10541, save subscribed dataIds for unsubscription. 
(#10573)
7eabceeb94 is described below

commit 7eabceeb94fc227457099368492050e86e497a66
Author: ken.lj <[email protected]>
AuthorDate: Fri Sep 9 11:25:08 2022 +0800

    fixes #10541, save subscribed dataIds for unsubscription. (#10573)
---
 .../java/org/apache/dubbo/registry/nacos/NacosRegistry.java    | 10 +++++++++-
 .../dubbo/registry/nacos/util/NacosInstanceManageUtil.java     |  4 ++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
 
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
index 021102ced2..d2f749c357 100644
--- 
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
+++ 
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
@@ -214,6 +214,7 @@ public class NacosRegistry extends FailbackRegistry {
                 
NacosInstanceManageUtil.setCorrespondingServiceNames(serviceName, serviceNames);
             }
         }
+
         doSubscribe(url, nacosAggregateListener, serviceNames);
     }
 
@@ -277,11 +278,18 @@ public class NacosRegistry extends FailbackRegistry {
             shutdownServiceNamesLookup();
         } else {
             Map<NotifyListener, NacosAggregateListener> listenerMap = 
originToAggregateListener.get(url);
+            if (listenerMap == null) {
+                logger.warn(String.format("No aggregate listener found for url 
%s, this service might have already been unsubscribed.", url));
+                return;
+            }
             NacosAggregateListener nacosAggregateListener = 
listenerMap.remove(listener);
             if (nacosAggregateListener != null) {
-                Set<String> serviceNames = getServiceNames(url, 
nacosAggregateListener);
+                Set<String> serviceNames = 
nacosAggregateListener.getServiceNames();
                 try {
                     doUnsubscribe(url, nacosAggregateListener, serviceNames);
+                    for (String serviceName : serviceNames) {
+                        
NacosInstanceManageUtil.removeCorrespondingServiceNames(serviceName);
+                    }
                 } catch (NacosException e) {
                     logger.error("Failed to unsubscribe " + url + " to nacos " 
+ getUrl() + ", cause: " + e.getMessage(), e);
                 }
diff --git 
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
 
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
index cb0179f27a..125f22a776 100644
--- 
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
+++ 
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java
@@ -52,6 +52,10 @@ public class NacosInstanceManageUtil {
         SERVICE_INSTANCE_LIST_MAP.put(serviceName, instanceList);
     }
 
+    public static Set<String> removeCorrespondingServiceNames(String 
serviceName) {
+        return CORRESPONDING_SERVICE_NAMES_MAP.remove(serviceName);
+    }
+
     public static List<Instance> getAllCorrespondingServiceInstanceList(String 
serviceName) {
         if (!CORRESPONDING_SERVICE_NAMES_MAP.containsKey(serviceName)) {
             return Lists.newArrayList();

Reply via email to