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"