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 2018/11/21 06:40:22 UTC
[incubator-dubbo] 01/02: Fix configurator bug
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 9f02b97ee00b80ffdb501d8fd48c794e88388d32
Author: ken.lj <ke...@gmail.com>
AuthorDate: Wed Nov 21 14:38:40 2018 +0800
Fix configurator bug
---
.../cluster/configurator/AbstractConfigurator.java | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
index 449bafd..3b682ee 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/AbstractConfigurator.java
@@ -57,13 +57,12 @@ public abstract class AbstractConfigurator implements Configurator {
*/
String apiVersion = configuratorUrl.getParameter(Constants.API_VERSION_KEY);
if (StringUtils.isNotEmpty(apiVersion)) {
- int configuratorPort = configuratorUrl.getPort();
- if (configuratorPort == 0) {
- configureIfMatch(NetUtils.getLocalHost(), url, configuratorUrl);
- } else {
- if (url.getPort() == configuratorPort) {
- configureIfMatch(configuratorUrl.getHost(), url, configuratorUrl);
- }
+ String currentSide = url.getParameter(Constants.SIDE_KEY);
+ String configuratorSide = configuratorUrl.getParameter(Constants.SIDE_KEY);
+ if (currentSide.equals(configuratorSide) && Constants.CONSUMER.equals(configuratorSide) && 0 == configuratorUrl.getPort()) {
+ url = configureIfMatch(NetUtils.getLocalHost(), url);
+ } else if (currentSide.equals(configuratorSide) && Constants.PROVIDER.equals(configuratorSide) && url.getPort() == configuratorUrl.getPort()) {
+ url = configureIfMatch(url.getHost(), url);
}
}
/**
@@ -80,21 +79,21 @@ public abstract class AbstractConfigurator implements Configurator {
// If override url has port, means it is a provider address. We want to control a specific provider with this override url, it may take effect on the specific provider instance or on consumers holding this provider instance.
if (configuratorUrl.getPort() != 0) {
if (url.getPort() == configuratorUrl.getPort()) {
- return configureIfMatch(url.getHost(), url, configuratorUrl);
+ return configureIfMatch(url.getHost(), url);
}
} else {// override url don't have a port, means the ip override url specify is a consumer address or 0.0.0.0
// 1.If it is a consumer ip address, the intention is to control a specific consumer instance, it must takes effect at the consumer side, any provider received this override url should ignore;
// 2.If the ip is 0.0.0.0, this override url can be used on consumer, and also can be used on provider
if (url.getParameter(Constants.SIDE_KEY, Constants.PROVIDER).equals(Constants.CONSUMER)) {
- return configureIfMatch(NetUtils.getLocalHost(), url, configuratorUrl);// NetUtils.getLocalHost is the ip address consumer registered to registry.
+ return configureIfMatch(NetUtils.getLocalHost(), url);// NetUtils.getLocalHost is the ip address consumer registered to registry.
} else if (url.getParameter(Constants.SIDE_KEY, Constants.CONSUMER).equals(Constants.PROVIDER)) {
- return configureIfMatch(Constants.ANYHOST_VALUE, url, configuratorUrl);// take effect on all providers, so address must be 0.0.0.0, otherwise it won't flow to this if branch
+ return configureIfMatch(Constants.ANYHOST_VALUE, url);// take effect on all providers, so address must be 0.0.0.0, otherwise it won't flow to this if branch
}
}
return url;
}
- private URL configureIfMatch(String host, URL url, URL configuratorUrl) {
+ private URL configureIfMatch(String host, URL url) {
if (Constants.ANYHOST_VALUE.equals(configuratorUrl.getHost()) || host.equals(configuratorUrl.getHost())) {
// TODO, to support wildcards
String providers = configuratorUrl.getParameter(Constants.OVERRIDE_PROVIDERS_KEY);
@@ -113,6 +112,7 @@ public abstract class AbstractConfigurator implements Configurator {
conditionKeys.add(Constants.VERSION_KEY);
conditionKeys.add(Constants.APPLICATION_KEY);
conditionKeys.add(Constants.SIDE_KEY);
+ conditionKeys.add(Constants.API_VERSION_KEY);
for (Map.Entry<String, String> entry : configuratorUrl.getParameters().entrySet()) {
String key = entry.getKey();
String value = entry.getValue();