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 2021/03/01 08:34:44 UTC
[dubbo] branch 3.0 updated: Fix it in Dubbo 3.0 (#7294)
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
The following commit(s) were added to refs/heads/3.0 by this push:
new bb1a400 Fix it in Dubbo 3.0 (#7294)
bb1a400 is described below
commit bb1a40035252740a6f24c936926a60685b550179
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Mon Mar 1 16:34:24 2021 +0800
Fix it in Dubbo 3.0 (#7294)
---
.../rpc/cluster/directory/AbstractDirectory.java | 38 ++++++++++++----------
.../rpc/cluster/directory/StaticDirectory.java | 2 +-
.../dubbo/rpc/cluster/router/tag/TagRouter.java | 3 +-
.../support/AbstractClusterInvokerTest.java | 19 ++++++-----
.../file/FileSystemDynamicConfigurationTest.java | 3 ++
.../client/migration/MigrationRuleListener.java | 3 +-
.../registry/integration/DynamicDirectory.java | 2 +-
7 files changed, 40 insertions(+), 30 deletions(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
index 7473466..88eda93 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
@@ -17,7 +17,6 @@
package org.apache.dubbo.rpc.cluster.directory;
import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.URLBuilder;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.StringUtils;
@@ -60,10 +59,14 @@ public abstract class AbstractDirectory<T> implements Directory<T> {
protected final Map<String, String> queryMap;
public AbstractDirectory(URL url) {
- this(url, null);
+ this(url, null, false);
}
- public AbstractDirectory(URL url, RouterChain<T> routerChain) {
+ public AbstractDirectory(URL url, boolean isUrlFromRegistry) {
+ this(url, null, isUrlFromRegistry);
+ }
+
+ public AbstractDirectory(URL url, RouterChain<T> routerChain, boolean isUrlFromRegistry) {
if (url == null) {
throw new IllegalArgumentException("url == null");
}
@@ -78,25 +81,26 @@ public abstract class AbstractDirectory<T> implements Directory<T> {
this.queryMap = StringUtils.parseQueryString(url.getParameterAndDecoded(REFER_KEY));
}
- if (consumerUrl == null && queryMap != null) {
- this.consumerUrl = turnRegistryUrlToConsumerUrl(url, queryMap);
+ if (consumerUrl == null) {
+ String host = StringUtils.isNotEmpty(queryMap.get("register.ip")) ? queryMap.get("register.ip") : this.url.getHost();
+ String path = queryMap.get(PATH_KEY);
+ String consumedProtocol = this.queryMap.get(PROTOCOL_KEY) == null ? DUBBO : this.queryMap.get(PROTOCOL_KEY);
+
+ URL consumerUrlFrom = this.url
+ .setHost(host)
+ .setPort(0)
+ .setProtocol(consumedProtocol)
+ .setPath(path == null ? queryMap.get(INTERFACE_KEY) : path);
+ if (isUrlFromRegistry) {
+ // reserve parameters if url is already a consumer url
+ consumerUrlFrom = consumerUrlFrom.clearParameters();
+ }
+ this.consumerUrl = consumerUrlFrom.addParameters(queryMap).removeParameter(MONITOR_KEY);
}
setRouterChain(routerChain);
}
- private URL turnRegistryUrlToConsumerUrl(URL url, Map<String, String> queryMap) {
- return URLBuilder.from(url)
- .setHost(queryMap.get("register.ip"))
- .setPort(0)
- .setProtocol(queryMap.get(PROTOCOL_KEY) == null ? DUBBO : queryMap.get(PROTOCOL_KEY))
- .setPath(queryMap.get(PATH_KEY) != null ? queryMap.get(PATH_KEY) : queryMap.get(INTERFACE_KEY))
- .clearParameters()
- .addParameters(queryMap)
- .removeParameter(MONITOR_KEY)
- .build();
- }
-
@Override
public List<Invoker<T>> list(Invocation invocation) throws RpcException {
if (destroyed) {
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java
index 0595c63..db1b202 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java
@@ -49,7 +49,7 @@ public class StaticDirectory<T> extends AbstractDirectory<T> {
}
public StaticDirectory(URL url, List<Invoker<T>> invokers, RouterChain<T> routerChain) {
- super(url == null && CollectionUtils.isNotEmpty(invokers) ? invokers.get(0).getUrl() : url, routerChain);
+ super(url == null && CollectionUtils.isNotEmpty(invokers) ? invokers.get(0).getUrl() : url, routerChain, false);
if (CollectionUtils.isEmpty(invokers)) {
throw new IllegalArgumentException("invokers == null");
}
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index 77429b5..690ebf9 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -21,7 +21,6 @@ import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
import org.apache.dubbo.common.config.configcenter.ConfigChangedEvent;
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
-import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.CollectionUtils;
@@ -248,7 +247,7 @@ public class TagRouter extends AbstractRouter implements ConfigurationListener {
Invoker<T> invoker = invokers.get(0);
URL url = invoker.getUrl();
- String providerApplication = url.getParameter(CommonConstants.REMOTE_APPLICATION_KEY);
+ String providerApplication = url.getRemoteApplication();
if (StringUtils.isEmpty(providerApplication)) {
logger.error("TagRouter must getConfig from or subscribe to a specific application, but the application " +
diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
index ef7c1d5..18796417 100644
--- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
+++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.URLBuilder;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.utils.NetUtils;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
@@ -74,6 +75,7 @@ public class AbstractClusterInvokerTest {
StaticDirectory<IHelloService> dic;
RpcInvocation invocation = new RpcInvocation();
URL url = URL.valueOf("registry://localhost:9090/org.apache.dubbo.rpc.cluster.support.AbstractClusterInvokerTest.IHelloService?refer=" + URL.encode("application=abstractClusterInvokerTest"));
+ URL consumerUrl = URL.valueOf("dubbo://localhost?application=abstractClusterInvokerTest&refer=application%3DabstractClusterInvokerTest");
Invoker<IHelloService> invoker1;
Invoker<IHelloService> invoker2;
@@ -251,15 +253,16 @@ public class AbstractClusterInvokerTest {
}
private URL turnRegistryUrlToConsumerUrl(URL url, Map<String, String> queryMap) {
- return URLBuilder.from(url)
- .setHost(queryMap.get("register.ip"))
+ String host = StringUtils.isNotEmpty(queryMap.get("register.ip")) ? queryMap.get("register.ip") : this.url.getHost();
+ String path = queryMap.get(PATH_KEY);
+ String consumedProtocol = queryMap.get(PROTOCOL_KEY) == null ? DUBBO : queryMap.get(PROTOCOL_KEY);
+
+ URL consumerUrlFrom = this.url
+ .setHost(host)
.setPort(0)
- .setProtocol(queryMap.get(PROTOCOL_KEY) == null ? DUBBO : queryMap.get(PROTOCOL_KEY))
- .setPath(queryMap.get(PATH_KEY) != null ? queryMap.get(PATH_KEY) : queryMap.get(INTERFACE_KEY))
- .clearParameters()
- .addParameters(queryMap)
- .removeParameter(MONITOR_KEY)
- .build();
+ .setProtocol(consumedProtocol)
+ .setPath(path == null ? queryMap.get(INTERFACE_KEY) : path);
+ return consumerUrlFrom.addParameters(queryMap).removeParameter(MONITOR_KEY);
}
@Test
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationTest.java
index 80282c1..20e127a 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationTest.java
@@ -24,6 +24,7 @@ import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
import java.io.File;
import java.util.TreeSet;
@@ -43,6 +44,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* {@link FileSystemDynamicConfiguration} Test
*/
+// Test often failed on Github Actions Platform because of file system on Azure
+@DisabledIfEnvironmentVariable(named = "DISABLE_FILE_SYSTEM_TEST", matches = "true")
public class FileSystemDynamicConfigurationTest {
private final Logger logger = LoggerFactory.getLogger(getClass());
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
index 4db36d3..399a260 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
@@ -46,6 +46,7 @@ import static java.util.Collections.unmodifiableSet;
import static java.util.stream.Collectors.toSet;
import static java.util.stream.Stream.of;
import static org.apache.dubbo.common.constants.CommonConstants.MAPPING_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.INIT;
import static org.apache.dubbo.common.constants.RegistryConstants.PROVIDED_BY;
import static org.apache.dubbo.common.constants.RegistryConstants.SUBSCRIBED_SERVICE_NAMES_KEY;
@@ -123,7 +124,7 @@ public class MigrationRuleListener implements RegistryProtocolListener, Configur
@Override
public synchronized void onRefer(RegistryProtocol registryProtocol, ClusterInvoker<?> invoker, URL consumerUrl, URL registryURL) {
- MigrationRuleHandler<?> migrationRuleHandler = handlers.computeIfAbsent(consumerUrl.getServiceKey(), _key -> {
+ MigrationRuleHandler<?> migrationRuleHandler = handlers.computeIfAbsent(consumerUrl.getServiceKey() + consumerUrl.getParameter(TIMESTAMP_KEY), _key -> {
return new MigrationRuleHandler<>((MigrationInvoker<?>)invoker, consumerUrl);
});
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
index 997f41a..8b29483 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
@@ -88,7 +88,7 @@ public abstract class DynamicDirectory<T> extends AbstractDirectory<T> implement
protected ServiceInstancesChangedListener serviceListener;
public DynamicDirectory(Class<T> serviceType, URL url) {
- super(url);
+ super(url, true);
if (serviceType == null) {
throw new IllegalArgumentException("service type is null.");
}