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 2020/08/04 03:11:29 UTC

[dubbo] 01/02: enhance url notification

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

commit 29c5945b7416a985a355f5c2e63849d3f27f3418
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Jul 27 21:39:09 2020 +0800

    enhance url notification
---
 .../dubbo/registry/client/InstanceAddressURL.java       |  6 ++++++
 .../event/listener/ServiceInstancesChangedListener.java | 17 ++++++++++-------
 .../metadata/ServiceInstanceMetadataCustomizer.java     |  4 +++-
 .../client/metadata/ServiceInstanceMetadataUtils.java   |  3 +++
 4 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
index f4ec3fe..5159cfc 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
@@ -365,6 +365,12 @@ public class InstanceAddressURL extends URL {
 
     @Override
     public String toString() {
+        if (instance == null) {
+            return "{}";
+        }
+        if (metadataInfo == null) {
+            return instance.toString();
+        }
         return instance.toString() + metadataInfo.toString();
     }
 }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index 6ff7c2a..cb43cee 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -178,15 +178,18 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
     private void notifyAddressChanged() {
         listeners.forEach((key, notifyListener) -> {
             //FIXME, group wildcard match
-            List<URL> urls = serviceUrls.get(key);
-            if (CollectionUtils.isEmpty(urls)) {
-                urls = new ArrayList<>();
-                urls.add(new InstanceAddressURL());
-            }
-            notifyListener.notify(urls);
+            notifyListener.notify(toUrlsWithEmpty(serviceUrls.get(key)));
         });
     }
 
+    private List<URL> toUrlsWithEmpty(List<URL> urls) {
+        if (CollectionUtils.isEmpty(urls)) {
+            urls = new ArrayList<>();
+            urls.add(new InstanceAddressURL());
+        }
+        return urls;
+    }
+
     public void addListener(String serviceKey, NotifyListener listener) {
         this.listeners.put(serviceKey, listener);
     }
@@ -196,7 +199,7 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
     }
 
     public List<URL> getUrls(String serviceKey) {
-        return serviceUrls.get(serviceKey);
+        return toUrlsWithEmpty(serviceUrls.get(serviceKey));
     }
 
     /**
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java
index 8d9824a..76fb765 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java
@@ -78,7 +78,9 @@ public class ServiceInstanceMetadataCustomizer implements ServiceInstanceCustomi
                 serviceInstance.getMetadata().putAll(allParams);
             } else {
                 for (String p : included) {
-                    serviceInstance.getMetadata().put(p, allParams.get(p));
+                    if (allParams.get(p) != null) {
+                        serviceInstance.getMetadata().put(p, allParams.get(p));
+                    }
                 }
             }
         });
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
index 0f0cf3c..0881e0c 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
@@ -241,6 +241,9 @@ public class ServiceInstanceMetadataUtils {
 
     public static void calInstanceRevision(ServiceDiscovery serviceDiscovery, ServiceInstance instance) {
         String registryCluster = serviceDiscovery.getUrl().getParameter(ID_KEY);
+        if (registryCluster == null) {
+            return;
+        }
         MetadataInfo metadataInfo = WritableMetadataService.getDefaultExtension().getMetadataInfos().get(registryCluster);
         if (metadataInfo != null) {
             String existingInstanceRevision = instance.getMetadata().get(EXPORTED_SERVICES_REVISION_PROPERTY_NAME);