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 328d7c8  fix uts
328d7c8 is described below

commit 328d7c88c1f664cab99a1cadd41e9dda1dcc88ba
Author: ken.lj <[email protected]>
AuthorDate: Mon Dec 6 14:26:57 2021 +0800

    fix uts
---
 .../common/config/CompositeConfiguration.java      |  6 +-
 .../org/apache/dubbo/config/ServiceConfig.java     | 75 +++++++++++-----------
 .../ConfigurableMetadataServiceExporter.java       |  9 ++-
 .../dubbo/test/spring/SpringXmlConfigTest.java     | 10 +++
 .../{dubbo-demo.xml => dubbo-demo-provider.xml}    | 13 +---
 .../src/main/resources/spring/dubbo-demo.xml       | 12 +---
 6 files changed, 58 insertions(+), 67 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
index dbb49de..d4e4774 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
@@ -20,8 +20,8 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 
 import java.util.Arrays;
-import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * This is an abstraction specially customized for the sequence Dubbo 
retrieves properties.
@@ -32,7 +32,7 @@ public class CompositeConfiguration implements Configuration {
     /**
      * List holding all the configuration
      */
-    private List<Configuration> configList = new LinkedList<Configuration>();
+    private List<Configuration> configList = new CopyOnWriteArrayList<>();
 
     //FIXME, consider change configList to SortedMap to replace this boolean 
status.
     private boolean dynamicIncluded;
@@ -51,7 +51,7 @@ public class CompositeConfiguration implements Configuration {
         this.dynamicIncluded = dynamicIncluded;
     }
 
-    //FIXME, consider change configList to SortedMap to replace this boolean 
status.
+    //FIXME, consider changing configList to SortedMap to replace this boolean 
status.
     public boolean isDynamicIncluded() {
         return dynamicIncluded;
     }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index f3fcacb..4a1a8df 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -531,8 +531,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
         }
 
         // export service
-        String host = findConfigedHosts(protocolConfig, registryURLs, params);
-        Integer port = findConfigedPorts(protocolConfig, name, params);
+        String host = findConfiguredHosts(protocolConfig, provider, 
registryURLs, params);
+        Integer port = findConfiguredPort(protocolConfig, provider, 
this.getExtensionLoader(Protocol.class), name, params);
         URL url = new ServiceConfigURL(name, null, null, host, port, 
getContextPath(protocolConfig).map(p -> p + "/" + path).orElse(path), params);
         url.setScopeModel(getScopeModel());
 
@@ -655,6 +655,27 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> 
{
                 && 
LOCAL_PROTOCOL.equalsIgnoreCase(getProtocols().get(0).getName());
     }
 
+    private void postProcessConfig() {
+        List<ConfigPostProcessor> configPostProcessors = 
this.getExtensionLoader(ConfigPostProcessor.class)
+                .getActivateExtension(URL.valueOf("configPostProcessor://", 
getScopeModel()), (String[]) null);
+        configPostProcessors.forEach(component -> 
component.postProcessServiceConfig(this));
+    }
+
+    public void addServiceListener(ServiceListener listener) {
+        this.serviceListeners.add(listener);
+    }
+
+    protected void onExported() {
+        for (ServiceListener serviceListener : this.serviceListeners) {
+            serviceListener.exported(this);
+        }
+    }
+
+    protected void onUnexpoted() {
+        for (ServiceListener serviceListener : this.serviceListeners) {
+            serviceListener.unexported(this);
+        }
+    }
 
     /**
      * Register & bind IP address for service provider, can be configured 
separately.
@@ -666,9 +687,10 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> 
{
      * @param map
      * @return
      */
-    private String findConfigedHosts(ProtocolConfig protocolConfig,
-                                     List<URL> registryURLs,
-                                     Map<String, String> map) {
+    private static String findConfiguredHosts(ProtocolConfig protocolConfig,
+                                              ProviderConfig provider,
+                                              List<URL> registryURLs,
+                                              Map<String, String> map) {
         boolean anyhost = false;
 
         String hostToBind = getValueFromConfig(protocolConfig, 
DUBBO_IP_TO_BIND);
@@ -717,9 +739,11 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> 
{
      * @param name
      * @return
      */
-    private Integer findConfigedPorts(ProtocolConfig protocolConfig,
-                                      String name,
-                                      Map<String, String> map) {
+    private static synchronized Integer findConfiguredPort(ProtocolConfig 
protocolConfig,
+                                                           ProviderConfig 
provider,
+                                                           
ExtensionLoader<Protocol> extensionLoader,
+                                                           String name,
+                                                           Map<String, String> 
map) {
         Integer portToBind = null;
 
         // parse bind port from environment
@@ -732,7 +756,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
             if (provider != null && (portToBind == null || portToBind == 0)) {
                 portToBind = provider.getPort();
             }
-            final int defaultPort = 
this.getExtensionLoader(Protocol.class).getExtension(name).getDefaultPort();
+            final int defaultPort = 
extensionLoader.getExtension(name).getDefaultPort();
             if (portToBind == null || portToBind == 0) {
                 portToBind = defaultPort;
             }
@@ -745,20 +769,20 @@ public class ServiceConfig<T> extends 
ServiceConfigBase<T> {
             }
         }
 
-        // registry port, not used as bind port by default
+        // registry port, not used as binding port by default
         String portToRegistryStr = getValueFromConfig(protocolConfig, 
DUBBO_PORT_TO_REGISTRY);
         Integer portToRegistry = parsePort(portToRegistryStr);
         if (portToRegistry != null) {
             portToBind = portToRegistry;
         }
 
-        // save bind port, used as url's key later
+        // save binding port, will be used as key in url later
         map.put(BIND_PORT_KEY, String.valueOf(portToBind));
 
         return portToBind;
     }
 
-    private Integer parsePort(String configPort) {
+    private static Integer parsePort(String configPort) {
         Integer port = null;
         if (configPort != null && configPort.length() > 0) {
             try {
@@ -774,7 +798,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
         return port;
     }
 
-    private String getValueFromConfig(ProtocolConfig protocolConfig, String 
key) {
+    private static String getValueFromConfig(ProtocolConfig protocolConfig, 
String key) {
         String protocolPrefix = protocolConfig.getName().toUpperCase() + "_";
         String value = ConfigUtils.getSystemProperty(protocolPrefix + key);
         if (StringUtils.isEmpty(value)) {
@@ -783,12 +807,12 @@ public class ServiceConfig<T> extends 
ServiceConfigBase<T> {
         return value;
     }
 
-    private Integer getRandomPort(String protocol) {
+    private static Integer getRandomPort(String protocol) {
         protocol = protocol.toLowerCase();
         return RANDOM_PORT_MAP.getOrDefault(protocol, Integer.MIN_VALUE);
     }
 
-    private void putRandomPort(String protocol, Integer port) {
+    private static void putRandomPort(String protocol, Integer port) {
         protocol = protocol.toLowerCase();
         if (!RANDOM_PORT_MAP.containsKey(protocol)) {
             RANDOM_PORT_MAP.put(protocol, port);
@@ -796,25 +820,4 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> 
{
         }
     }
 
-    private void postProcessConfig() {
-        List<ConfigPostProcessor> configPostProcessors = 
this.getExtensionLoader(ConfigPostProcessor.class)
-                .getActivateExtension(URL.valueOf("configPostProcessor://", 
getScopeModel()), (String[]) null);
-        configPostProcessors.forEach(component -> 
component.postProcessServiceConfig(this));
-    }
-
-    public void addServiceListener(ServiceListener listener) {
-        this.serviceListeners.add(listener);
-    }
-
-    protected void onExported() {
-        for (ServiceListener serviceListener : this.serviceListeners) {
-            serviceListener.exported(this);
-        }
-    }
-
-    protected void onUnexpoted() {
-        for (ServiceListener serviceListener : this.serviceListeners) {
-            serviceListener.unexported(this);
-        }
-    }
 }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
index e0e8642..c9a2e77 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
@@ -48,18 +48,17 @@ public class ConfigurableMetadataServiceExporter {
 
     private MetadataServiceDelegation metadataService;
 
-    private final ServiceConfig<MetadataService> serviceConfig;
+    private volatile ServiceConfig<MetadataService> serviceConfig;
     private final ApplicationModel applicationModel;
 
     public ConfigurableMetadataServiceExporter(ApplicationModel 
applicationModel, MetadataServiceDelegation metadataService) {
         this.applicationModel = applicationModel;
         this.metadataService = metadataService;
-        this.serviceConfig = buildServiceConfig();
     }
 
-    public ConfigurableMetadataServiceExporter export() {
-
-        if (!isExported()) {
+    public synchronized ConfigurableMetadataServiceExporter export() {
+        if (serviceConfig == null || !isExported()) {
+            this.serviceConfig = buildServiceConfig();
             // export
             serviceConfig.export();
             
metadataService.setMetadataURL(serviceConfig.getExportedUrls().get(0));
diff --git 
a/dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java
 
b/dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java
index 7d7eba1..484940a 100644
--- 
a/dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java
+++ 
b/dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java
@@ -24,6 +24,7 @@ import org.apache.dubbo.test.common.api.RestDemoService;
 import org.apache.dubbo.test.common.registrycenter.RegistryCenter;
 import 
org.apache.dubbo.test.common.registrycenter.ZookeeperSingleRegistryCenter;
 import org.apache.dubbo.test.spring.context.MockSpringInitCustomizer;
+
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
@@ -35,6 +36,7 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KE
 public class SpringXmlConfigTest {
 
     private static RegistryCenter registryCenter;
+    private static ClassPathXmlApplicationContext providerContext;
 
     @BeforeAll
     public static void beforeAll() {
@@ -47,11 +49,19 @@ public class SpringXmlConfigTest {
     public static void afterAll(){
         DubboBootstrap.reset();
         registryCenter.shutdown();
+        providerContext.close();
+    }
+
+    private void startProvider() {
+        providerContext = new 
ClassPathXmlApplicationContext("/spring/dubbo-demo-provider.xml");
     }
 
     @Test
     public void test() {
         SysProps.setProperty(SHUTDOWN_WAIT_KEY, "2000");
+        // start provider context
+        startProvider();
+        // start consumer context
         ClassPathXmlApplicationContext applicationContext = null;
         try {
             applicationContext = new 
ClassPathXmlApplicationContext("/spring/dubbo-demo.xml");
diff --git 
a/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml 
b/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo-provider.xml
similarity index 78%
copy from dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml
copy to 
dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo-provider.xml
index 05392da..0520c33 100644
--- a/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml
+++ 
b/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo-provider.xml
@@ -25,7 +25,7 @@
 
     <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
     <dubbo:metadata-report address="zookeeper://127.0.0.1:2181"/>
-    <dubbo:registry 
address="zookeeper://127.0.0.1:2181?registry-type=service"/>
+    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
     <dubbo:protocol name="dubbo" port="-1"/>
     <dubbo:protocol name="rest" port="-1"/>
@@ -39,15 +39,4 @@
                    ref="greetingServiceImpl" protocol="dubbo"/>
     <dubbo:service version="1.0.0" timeout="5000" 
interface="org.apache.dubbo.test.common.api.RestDemoService"
                    ref="restDemoServiceImpl" protocol="rest"/>
-
-    <!-- references -->
-    <dubbo:consumer check="false" scope="remote" />
-    <dubbo:reference id="demoService" scope="local"
-                     interface="org.apache.dubbo.test.common.api.DemoService"/>
-
-    <dubbo:reference  id="greetingService" version="1.0.0" group="greeting"
-                     
interface="org.apache.dubbo.test.common.api.GreetingService"/>
-
-    <dubbo:reference  id="restDemoService" version="1.0.0" protocol="rest"
-                      
interface="org.apache.dubbo.test.common.api.RestDemoService"/>
 </beans>
diff --git 
a/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml 
b/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml
index 05392da..69dbb73 100644
--- a/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml
+++ b/dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml
@@ -25,21 +25,11 @@
 
     <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
     <dubbo:metadata-report address="zookeeper://127.0.0.1:2181"/>
-    <dubbo:registry 
address="zookeeper://127.0.0.1:2181?registry-type=service"/>
+    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
     <dubbo:protocol name="dubbo" port="-1"/>
     <dubbo:protocol name="rest" port="-1"/>
 
-    <bean id="demoServiceImpl" 
class="org.apache.dubbo.test.common.impl.DemoServiceImpl"/>
-    <bean id="greetingServiceImpl" 
class="org.apache.dubbo.test.common.impl.GreetingServiceImpl"/>
-    <bean id="restDemoServiceImpl" 
class="org.apache.dubbo.test.common.impl.RestDemoServiceImpl"/>
-
-    <dubbo:service interface="org.apache.dubbo.test.common.api.DemoService" 
timeout="3000" ref="demoServiceImpl" protocol="dubbo"/>
-    <dubbo:service version="1.0.0" group="greeting" timeout="5000" 
interface="org.apache.dubbo.test.common.api.GreetingService"
-                   ref="greetingServiceImpl" protocol="dubbo"/>
-    <dubbo:service version="1.0.0" timeout="5000" 
interface="org.apache.dubbo.test.common.api.RestDemoService"
-                   ref="restDemoServiceImpl" protocol="rest"/>
-
     <!-- references -->
     <dubbo:consumer check="false" scope="remote" />
     <dubbo:reference id="demoService" scope="local"

Reply via email to