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

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


The following commit(s) were added to refs/heads/3.0-metadata-refactor by this 
push:
     new 3896358  improve service discovery interface
3896358 is described below

commit 38963585713c315f3f804894ea54f50a6f66399c
Author: ken.lj <[email protected]>
AuthorDate: Tue Dec 7 23:28:28 2021 +0800

    improve service discovery interface
---
 .../dubbo/config/metadata/MetadataServiceDelegation.java       | 10 +++++-----
 .../org/apache/dubbo/metadata/AbstractServiceNameMapping.java  |  5 +++++
 .../java/org/apache/dubbo/metadata/ServiceNameMapping.java     |  3 +++
 .../apache/dubbo/registry/client/AbstractServiceDiscovery.java |  7 ++++++-
 .../org/apache/dubbo/registry/client/ServiceDiscovery.java     |  4 +++-
 .../apache/dubbo/registry/client/metadata/MetadataUtils.java   |  7 +++----
 .../dubbo/registry/multiple/MultipleServiceDiscovery.java      |  7 ++++++-
 7 files changed, 31 insertions(+), 12 deletions(-)

diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
index 6b36532..d7d12f7 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceDelegation.java
@@ -88,7 +88,7 @@ public class MetadataServiceDelegation implements 
MetadataService, Disposable {
         SortedSet<URL> bizURLs = new TreeSet<>(URLComparator.INSTANCE);
         List<ServiceDiscovery> serviceDiscoveries = 
registryManager.getServiceDiscoveries();
         for (ServiceDiscovery sd : serviceDiscoveries) {
-            MetadataInfo metadataInfo = sd.getMetadata();
+            MetadataInfo metadataInfo = sd.getLocalMetadata();
             Map<String, SortedSet<URL>> serviceURLs = 
metadataInfo.getExportedServiceURLs();
             for (Map.Entry<String, SortedSet<URL>> entry : 
serviceURLs.entrySet()) {
                 SortedSet<URL> urls = entry.getValue();
@@ -108,7 +108,7 @@ public class MetadataServiceDelegation implements 
MetadataService, Disposable {
         SortedSet<URL> bizURLs = new TreeSet<>(URLComparator.INSTANCE);
         List<ServiceDiscovery> serviceDiscoveries = 
registryManager.getServiceDiscoveries();
         for (ServiceDiscovery sd : serviceDiscoveries) {
-            MetadataInfo metadataInfo = sd.getMetadata();
+            MetadataInfo metadataInfo = sd.getLocalMetadata();
             Map<String, SortedSet<URL>> serviceURLs = 
metadataInfo.getSubscribedServiceURLs();
             for (Map.Entry<String, SortedSet<URL>> entry : 
serviceURLs.entrySet()) {
                 SortedSet<URL> urls = entry.getValue();
@@ -137,7 +137,7 @@ public class MetadataServiceDelegation implements 
MetadataService, Disposable {
         List<ServiceDiscovery> serviceDiscoveries = 
registryManager.getServiceDiscoveries();
         Map<String, SortedSet<URL>> allServiceURLs = new HashMap<>();
         for (ServiceDiscovery sd : serviceDiscoveries) {
-            MetadataInfo metadataInfo = sd.getMetadata();
+            MetadataInfo metadataInfo = sd.getLocalMetadata();
             Map<String, SortedSet<URL>> serviceURLs = 
metadataInfo.getExportedServiceURLs();
             allServiceURLs.putAll(serviceURLs);
         }
@@ -171,7 +171,7 @@ public class MetadataServiceDelegation implements 
MetadataService, Disposable {
         }
 
         for (ServiceDiscovery sd : registryManager.getServiceDiscoveries()) {
-            MetadataInfo metadataInfo = sd.getMetadata();
+            MetadataInfo metadataInfo = sd.getLocalMetadata();
             if (revision.equals(metadataInfo.calAndGetRevision())) {
                 return metadataInfo;
             }
@@ -187,7 +187,7 @@ public class MetadataServiceDelegation implements 
MetadataService, Disposable {
     public List<MetadataInfo> getMetadataInfos() {
         List<MetadataInfo> metadataInfos = new ArrayList<>();
         for (ServiceDiscovery sd : registryManager.getServiceDiscoveries()) {
-            metadataInfos.add(sd.getMetadata());
+            metadataInfos.add(sd.getLocalMetadata());
         }
         return metadataInfos;
     }
diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
index 843529a..e18d789 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractServiceNameMapping.java
@@ -24,6 +24,7 @@ import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ScopeModelAware;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
@@ -181,4 +182,8 @@ public abstract class AbstractServiceNameMapping implements 
ServiceNameMapping,
         return serviceToAppsMapping.remove(serviceKey);
     }
 
+    @Override
+    public Map<String, Set<String>> getCachedMapping() {
+        return Collections.unmodifiableMap(serviceToAppsMapping);
+    }
 }
diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ServiceNameMapping.java
 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ServiceNameMapping.java
index 6e88b7c..ab923e7 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ServiceNameMapping.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ServiceNameMapping.java
@@ -24,6 +24,7 @@ import org.apache.dubbo.rpc.model.ScopeModel;
 import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import java.util.Arrays;
+import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -113,5 +114,7 @@ public interface ServiceNameMapping {
 
     Set<String> getCachedMapping(URL consumerURL);
 
+    Map<String, Set<String>> getCachedMapping();
+
     Set<String> removeCachedMapping(String serviceKey);
 }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
index 203f528..e86a6c6 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
@@ -129,7 +129,7 @@ public abstract class AbstractServiceDiscovery implements 
ServiceDiscovery {
     }
 
     @Override
-    public MetadataInfo getMetadata() {
+    public MetadataInfo getLocalMetadata() {
         return this.metadataInfo;
     }
 
@@ -176,6 +176,11 @@ public abstract class AbstractServiceDiscovery implements 
ServiceDiscovery {
     }
 
     @Override
+    public MetadataInfo getRemoteMetadata(String revision) {
+       return metaCacheManager.get(revision);
+    }
+
+    @Override
     public final void destroy() throws Exception {
         isDestroy = true;
         metaCacheManager.destroy();
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
index e9867cc..9a9d64f 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
@@ -67,7 +67,9 @@ public interface ServiceDiscovery extends RegistryService, 
Prioritized {
 
     ServiceInstance getLocalInstance();
 
-    MetadataInfo getMetadata();
+    MetadataInfo getLocalMetadata();
+
+    MetadataInfo getRemoteMetadata(String revision);
 
     MetadataInfo getRemoteMetadata(String revision, ServiceInstance instance);
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
index ef97a21..777da91 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
@@ -145,7 +145,7 @@ public class MetadataUtils {
                 logger.debug("Instance " + instance.getAddress() + " is using 
metadata type " + metadataType);
             }
             if (REMOTE_METADATA_STORAGE_TYPE.equals(metadataType)) {
-                metadataInfo = MetadataUtils.getMetadata(instance, 
metadataReport);
+                metadataInfo = MetadataUtils.getMetadata(revision, instance, 
metadataReport);
             } else {
                 // change the instance used to communicate to avoid all 
requests route to the same instance
                 MetadataService metadataServiceProxy = 
MetadataUtils.getMetadataServiceProxy(instance);
@@ -162,9 +162,8 @@ public class MetadataUtils {
         return metadataInfo;
     }
 
-    public static MetadataInfo getMetadata(ServiceInstance instance, 
MetadataReport metadataReport) {
-        SubscriberMetadataIdentifier identifier = new 
SubscriberMetadataIdentifier(instance.getServiceName(),
-            
ServiceInstanceMetadataUtils.getExportedServicesRevision(instance));
+    public static MetadataInfo getMetadata(String revision, ServiceInstance 
instance, MetadataReport metadataReport) {
+        SubscriberMetadataIdentifier identifier = new 
SubscriberMetadataIdentifier(instance.getServiceName(), revision);
 
         if (metadataReport == null) {
             throw new IllegalStateException("No valid remote metadata report 
specified.");
diff --git 
a/dubbo-registry/dubbo-registry-multiple/src/main/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-multiple/src/main/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscovery.java
index 361014c..78bf081 100644
--- 
a/dubbo-registry/dubbo-registry-multiple/src/main/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-multiple/src/main/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscovery.java
@@ -133,7 +133,12 @@ public class MultipleServiceDiscovery implements 
ServiceDiscovery {
     }
 
     @Override
-    public MetadataInfo getMetadata() {
+    public MetadataInfo getLocalMetadata() {
+        throw new UnsupportedOperationException("Multiple registry 
implementation does not support getMetadata() method.");
+    }
+
+    @Override
+    public MetadataInfo getRemoteMetadata(String revision) {
         throw new UnsupportedOperationException("Multiple registry 
implementation does not support getMetadata() method.");
     }
 

Reply via email to