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

mercyblitz pushed a commit to branch 2.7.8-dev
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/2.7.8-dev by this push:
     new e65f81f  2.7.8 service introspection (#6337)
e65f81f is described below

commit e65f81f26da226fd352daff4feac38a82b873e09
Author: Mercy Ma <mercybl...@gmail.com>
AuthorDate: Wed Jun 17 11:02:48 2020 +0800

    2.7.8 service introspection (#6337)
    
    * Polish apache/dubbo#6296 : Adding the new methods into MetadataReport to 
manipulate the exported URLs for service introspection
    
    * Polish apache/dubbo#6296 : Adding the new methods into MetadataReport to 
manipulate the exported URLs for service introspection
    
    * Polish apache/dubbo#6171 : [Feature] Introducing the composite 
implementation of MetadataService
    
    * Revert "fix wrong check of InvokerListener when export a service (fix 
issue_6269) (#6271)"
    
    This reverts commit 91989cae508f8482f31ac335879da4a5975661c8.
    
    * Revert "fix wrong check of InvokerListener when export a service (fix 
issue_6269) (#6271)"
    
    This reverts commit 91989cae508f8482f31ac335879da4a5975661c8.
    
    * Revert the MetadataReport
    
    * Polish apache/dubbo#6305 : [Refactor] ServiceConfig and ReferenceConfig 
publish the ServiceDefinition based on the Dubbo Event
    
    * Polish apache/dubbo#6198 : [Issue] Fixing 
NacosDynamicConfiguration#publishConfig bug
    
    * Polish apache/dubbo#6310 : Refactoring MetadataReport's methods
    
    * Polish apache/dubbo#6198 : [Issue] Fixing 
NacosDynamicConfiguration#publishConfig bug
    
    * Polish apache/dubbo#6198 : [Issue] Fixing 
NacosDynamicConfiguration#publishConfig bug
    
    * Polish apache/dubbo#6315 : [Refactor] Refactoring the implementation of 
MetadataReport based on The Config-Center infrastructure
    
    Deprecated List :
    
    - NacosMetadataReport
    - ZookeeperMetadataReport
    
    * Polish apache/dubbo#6315 : Refactoring by TreePathDynamicConfiguration
    
    * Polish apache/dubbo#6315 : Refactoring ConsulDynamicConfiguration by 
TreePathDynamicConfiguration
    
    * Polish apache/dubbo#6315 : Reset the config base path to be "metadata" 
for ConfigCenterBasedMetadataReportFactory
    
    * Polish apache/dubbo#6315 : Bugfix
    
    * Polish apache/dubbo#6315 : Bugfix
    
    * Polish apache/dubbo#6315 : Correct words
    
    * Polish apache/dubbo#6333 : [Refactor] Using mandatory implementation of 
Service Instance registration instead of the event
    
    * Polish apache/dubbo#6336 : [Refactor] 
org.apache.dubbo.metadata.ServiceNameMapping
---
 .../dubbo/config/bootstrap/DubboBootstrap.java     | 29 ++++++++++++++++++++
 .../event/listener/ServiceNameMappingListener.java |  8 +-----
 .../DynamicConfigurationServiceNameMapping.java    | 18 +++++++++++--
 .../apache/dubbo/metadata/ServiceNameMapping.java  | 31 +++++++++++++++++++---
 ...DynamicConfigurationServiceNameMappingTest.java | 25 ++++++++++++++---
 .../CustomizableServiceInstanceListener.java       |  2 ++
 .../metadata/ServiceInstanceMetadataUtils.java     |  4 +--
 .../internal/org.apache.dubbo.event.EventListener  |  5 +++-
 8 files changed, 104 insertions(+), 18 deletions(-)

diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
index 16d331c..863e834 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
@@ -66,6 +66,7 @@ import 
org.apache.dubbo.registry.client.DefaultServiceInstance;
 import org.apache.dubbo.registry.client.ServiceDiscovery;
 import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry;
 import org.apache.dubbo.registry.client.ServiceInstance;
+import org.apache.dubbo.registry.client.ServiceInstanceCustomizer;
 import org.apache.dubbo.registry.support.AbstractRegistryFactory;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
@@ -1085,9 +1086,37 @@ public class DubboBootstrap extends GenericEventListener 
{
 
         ServiceInstance serviceInstance = createServiceInstance(serviceName, 
host, port);
 
+        preRegisterServiceInstance(serviceInstance);
+
         getServiceDiscoveries().forEach(serviceDiscovery -> 
serviceDiscovery.register(serviceInstance));
     }
 
+    /**
+     * Pre-register {@link ServiceInstance the service instance}
+     *
+     * @param serviceInstance {@link ServiceInstance the service instance}
+     * @since 2.7.8
+     */
+    private void preRegisterServiceInstance(ServiceInstance serviceInstance) {
+        customizeServiceInstance(serviceInstance);
+    }
+
+    /**
+     * Customize {@link ServiceInstance the service instance}
+     *
+     * @param serviceInstance {@link ServiceInstance the service instance}
+     * @since 2.7.8
+     */
+    private void customizeServiceInstance(ServiceInstance serviceInstance) {
+        ExtensionLoader<ServiceInstanceCustomizer> loader =
+                
ExtensionLoader.getExtensionLoader(ServiceInstanceCustomizer.class);
+        // FIXME, sort customizer before apply
+        loader.getSupportedExtensionInstances().forEach(customizer -> {
+            // customizes
+            customizer.customize(serviceInstance);
+        });
+    }
+
     private URL selectMetadataServiceExportedURL() {
 
         URL selectedURL = null;
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/ServiceNameMappingListener.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/ServiceNameMappingListener.java
index 4dcfde3..8607b51 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/ServiceNameMappingListener.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/event/listener/ServiceNameMappingListener.java
@@ -24,8 +24,6 @@ import org.apache.dubbo.metadata.ServiceNameMapping;
 
 import java.util.List;
 
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
 import static org.apache.dubbo.metadata.ServiceNameMapping.getDefaultExtension;
 
 /**
@@ -45,11 +43,7 @@ public class ServiceNameMappingListener implements 
EventListener<ServiceConfigEx
         ServiceConfig serviceConfig = event.getServiceConfig();
         List<URL> exportedURLs = serviceConfig.getExportedUrls();
         exportedURLs.forEach(url -> {
-            String serviceInterface = url.getServiceInterface();
-            String group = url.getParameter(GROUP_KEY);
-            String version = url.getParameter(VERSION_KEY);
-            String protocol = url.getProtocol();
-            serviceNameMapping.map(serviceInterface, group, version, protocol);
+            serviceNameMapping.map(url);
         });
     }
 }
diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java
 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java
index b03148a..fda59aa 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.metadata;
 
+import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -27,6 +28,8 @@ import java.util.Set;
 
 import static java.lang.String.valueOf;
 import static java.util.Arrays.asList;
+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
 import static org.apache.dubbo.common.utils.CollectionUtils.isNotEmpty;
 import static org.apache.dubbo.common.utils.StringUtils.SLASH;
 import static org.apache.dubbo.rpc.model.ApplicationModel.getName;
@@ -43,12 +46,18 @@ public class DynamicConfigurationServiceNameMapping 
implements ServiceNameMappin
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     @Override
-    public void map(String serviceInterface, String group, String version, 
String protocol) {
+    public void map(URL exportedURL) {
+
+        String serviceInterface = exportedURL.getServiceInterface();
 
         if (IGNORED_SERVICE_INTERFACES.contains(serviceInterface)) {
             return;
         }
 
+        String group = exportedURL.getParameter(GROUP_KEY);
+        String version = exportedURL.getParameter(VERSION_KEY);
+        String protocol = exportedURL.getProtocol();
+
         DynamicConfiguration dynamicConfiguration = 
DynamicConfiguration.getDynamicConfiguration();
 
         // the Dubbo Service Key as group
@@ -66,10 +75,15 @@ public class DynamicConfigurationServiceNameMapping 
implements ServiceNameMappin
     }
 
     @Override
-    public Set<String> get(String serviceInterface, String group, String 
version, String protocol) {
+    public Set<String> get(URL subscribedURL) {
 
         DynamicConfiguration dynamicConfiguration = 
DynamicConfiguration.getDynamicConfiguration();
 
+        String serviceInterface = subscribedURL.getServiceInterface();
+        String group = subscribedURL.getParameter(GROUP_KEY);
+        String version = subscribedURL.getParameter(VERSION_KEY);
+        String protocol = subscribedURL.getProtocol();
+
         Set<String> serviceNames = new LinkedHashSet<>();
         execute(() -> {
             Set<String> keys = 
dynamicConfiguration.getConfigKeys(buildGroup(serviceInterface, group, version, 
protocol));
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 74113f2..8a8c10d 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
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.metadata;
 
+import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.Set;
@@ -37,8 +38,20 @@ public interface ServiceNameMapping {
      * @param group            the group of Dubbo service interface (optional)
      * @param version          the version of Dubbo service interface version 
(optional)
      * @param protocol         the protocol of Dubbo service interface 
exported (optional)
+     * @deprecated 2.7.8 This method will be removed since 3.0
      */
-    void map(String serviceInterface, String group, String version, String 
protocol);
+    @Deprecated
+    default void map(String serviceInterface, String group, String version, 
String protocol) {
+        throw new UnsupportedOperationException("This method has been 
deprecated and should not be invoked!");
+    }
+
+    /**
+     * Map the specified Dubbo service {@link URL} to current Dubbo service 
name
+     *
+     * @param exportedURL the {@link URL} that the Dubbo Provider exported
+     * @since 2.7.8
+     */
+    void map(URL exportedURL);
 
     /**
      * Get the service names from the specified Dubbo service interface, 
group, version and protocol
@@ -47,10 +60,22 @@ public interface ServiceNameMapping {
      * @param group            the group of Dubbo service interface (optional)
      * @param version          the version of Dubbo service interface version 
(optional)
      * @param protocol         the protocol of Dubbo service interface 
exported (optional)
-     * @return
+     * @return non-null {@link Set}
+     * @deprecated 2.7.8 This method will be removed since 3.0
      */
-    Set<String> get(String serviceInterface, String group, String version, 
String protocol);
+    @Deprecated
+    default Set<String> get(String serviceInterface, String group, String 
version, String protocol) {
+        throw new UnsupportedOperationException("This method has been 
deprecated and should not be invoked!");
+    }
 
+    /**
+     * Get the service names from the subscribed Dubbo service {@link URL}
+     *
+     * @param subscribedURL the {@link URL} that the Dubbo consumer subscribed
+     * @return non-null {@link Set}
+     * @since 2.7.8
+     */
+    Set<String> get(URL subscribedURL);
 
     /**
      * Get the default extension of {@link ServiceNameMapping}
diff --git 
a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java
 
b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java
index 0e677df..d4d25ee 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.metadata;
 
+import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
 import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;
 import org.apache.dubbo.config.ApplicationConfig;
@@ -28,10 +29,13 @@ import java.util.Set;
 import java.util.TreeSet;
 
 import static java.util.Arrays.asList;
+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
 import static 
org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
 import static 
org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.buildGroup;
 import static org.apache.dubbo.metadata.ServiceNameMapping.getDefaultExtension;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * {@link DynamicConfigurationServiceNameMapping} Test
@@ -62,6 +66,17 @@ public class DynamicConfigurationServiceNameMappingTest {
     }
 
     @Test
+    public void testAndGetOnFailed() {
+        assertThrows(UnsupportedOperationException.class, () -> {
+            serviceNameMapping.map(null, null, null, null);
+        });
+
+        assertThrows(UnsupportedOperationException.class, () -> {
+            serviceNameMapping.get(null, null, null, null);
+        });
+    }
+
+    @Test
     public void testMapAndGet() {
 
         String serviceName = "test";
@@ -74,14 +89,18 @@ public class DynamicConfigurationServiceNameMappingTest {
         String version = null;
         String protocol = null;
 
-        serviceNameMapping.map(serviceInterface, group, version, protocol);
+        URL url = 
URL.valueOf("dubbo://127.0.0.1:20880").setServiceInterface(serviceInterface)
+                .addParameter(GROUP_KEY, group)
+                .addParameter(VERSION_KEY, version);
+
+        serviceNameMapping.map(url);
 
         ApplicationModel.getConfigManager().removeConfig(new 
ApplicationConfig(serviceName));
         ApplicationModel.getConfigManager().setApplication(new 
ApplicationConfig(serviceName2));
 
-        serviceNameMapping.map(serviceInterface, group, version, protocol);
+        serviceNameMapping.map(url);
 
-        Set<String> serviceNames = serviceNameMapping.get(serviceInterface, 
group, version, protocol);
+        Set<String> serviceNames = serviceNameMapping.get(url);
 
         assertEquals(new TreeSet(asList(serviceName, serviceName2)), 
serviceNames);
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListener.java
index d2ee50f..f739ca8 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/CustomizableServiceInstanceListener.java
@@ -26,7 +26,9 @@ import 
org.apache.dubbo.registry.client.event.ServiceInstancePreRegisteredEvent;
  * Customize the {@link ServiceInstance} before registering to Registry.
  *
  * @since 2.7.5
+ * @deprecated 2.7.8 Current class will be removed since 3.0.0
  */
+@Deprecated
 public class CustomizableServiceInstanceListener implements 
EventListener<ServiceInstancePreRegisteredEvent> {
 
     @Override
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 b66ae79..14c7988 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
@@ -207,10 +207,10 @@ public class ServiceInstanceMetadataUtils {
                 || metadata.containsKey(METADATA_SERVICE_URLS_PROPERTY_NAME);
     }
 
-    public static void setEndpoints(ServiceInstance serviceInstance, 
Map<String, Integer> protocolPortss) {
+    public static void setEndpoints(ServiceInstance serviceInstance, 
Map<String, Integer> protocolPorts) {
         Map<String, String> metadata = serviceInstance.getMetadata();
         List<Endpoint> endpoints = new ArrayList<>();
-        protocolPortss.forEach((k, v) -> {
+        protocolPorts.forEach((k, v) -> {
             Endpoint endpoint = new Endpoint(v, k);
             endpoints.add(endpoint);
         });
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
index 2ac7539..bbd6b81 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.event.EventListener
@@ -1,4 +1,7 @@
-service-instance=org.apache.dubbo.registry.client.event.listener.CustomizableServiceInstanceListener
+# "service-instance" has been deprecated since 2.7.8
+# 
service-instance=org.apache.dubbo.registry.client.event.listener.CustomizableServiceInstanceListener
+
 
registry-logging=org.apache.dubbo.registry.client.event.listener.LoggingEventListener
+
 # "publishing-remote-metadata" in introduced since 2.7.8
 
publishing-remote-metadata=org.apache.dubbo.registry.client.event.listener.PublishingRemoteMetadataListener
\ No newline at end of file

Reply via email to