You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by ki...@apache.org on 2019/04/26 07:54:46 UTC
[incubator-dubbo] branch master updated: Revert "Merge pull request
#3520, fix #538 polish the process of deciding the ip to bind." (#3935)
This is an automated email from the ASF dual-hosted git repository.
kirito pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new b8d9f76 Revert "Merge pull request #3520, fix #538 polish the process of deciding the ip to bind." (#3935)
b8d9f76 is described below
commit b8d9f76af68746788df39bbbbf6cb18f10c89a7c
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Fri Apr 26 15:54:29 2019 +0800
Revert "Merge pull request #3520, fix #538 polish the process of deciding the ip to bind." (#3935)
This reverts commit ade0cd70
---
.../org/apache/dubbo/common/utils/NetUtils.java | 25 ++++-----
.../apache/dubbo/common/utils/NetUtilsTest.java | 2 +
.../dubbo/config/AbstractInterfaceConfig.java | 3 ++
.../org/apache/dubbo/config/ReferenceConfig.java | 5 +-
.../org/apache/dubbo/config/ServiceConfig.java | 61 +++++++++++++---------
5 files changed, 54 insertions(+), 42 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
index 187e0e2..f03d91a 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
@@ -106,7 +106,6 @@ public class NetUtils {
return Constants.ANYHOST_VALUE.equals(host);
}
- // FIXME: should remove this method completely
public static boolean isInvalidLocalHost(String host) {
return host == null
|| host.length() == 0
@@ -115,7 +114,6 @@ public class NetUtils {
|| (LOCAL_IP_PATTERN.matcher(host).matches());
}
- // FIXME: should remove this method completely
public static boolean isValidLocalHost(String host) {
return !isInvalidLocalHost(host);
}
@@ -126,6 +124,9 @@ public class NetUtils {
}
static boolean isValidV4Address(InetAddress address) {
+ if (address == null || address.isLoopbackAddress()) {
+ return false;
+ }
String name = address.getHostAddress();
return (name != null
&& IP_PATTERN.matcher(name).matches()
@@ -152,10 +153,6 @@ public class NetUtils {
return false;
}
- static boolean isValidPublicAddress(InetAddress address) {
- return !address.isSiteLocalAddress() && !address.isLoopbackAddress();
- }
-
/**
* normalize the ipv6 Address, convert scope name to scope id.
* e.g.
@@ -235,17 +232,15 @@ public class NetUtils {
}
private static Optional<InetAddress> toValidAddress(InetAddress address) {
- if (isValidPublicAddress(address)) {
- if (address instanceof Inet6Address) {
- Inet6Address v6Address = (Inet6Address) address;
- if (isValidV6Address(v6Address)) {
- return Optional.ofNullable(normalizeV6Address(v6Address));
- }
- }
- if (isValidV4Address(address)) {
- return Optional.of(address);
+ if (address instanceof Inet6Address) {
+ Inet6Address v6Address = (Inet6Address) address;
+ if (isValidV6Address(v6Address)) {
+ return Optional.ofNullable(normalizeV6Address(v6Address));
}
}
+ if (isValidV4Address(address)) {
+ return Optional.of(address);
+ }
return Optional.empty();
}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java
index 2fe0a63..797f2b4 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java
@@ -106,6 +106,7 @@ public class NetUtilsTest {
@Test
public void testIsValidAddress() throws Exception {
+ assertFalse(NetUtils.isValidV4Address((InetAddress) null));
InetAddress address = mock(InetAddress.class);
when(address.isLoopbackAddress()).thenReturn(true);
assertFalse(NetUtils.isValidV4Address(address));
@@ -132,6 +133,7 @@ public class NetUtilsTest {
public void testGetLocalAddress() throws Exception {
InetAddress address = NetUtils.getLocalAddress();
assertNotNull(address);
+ assertTrue(NetUtils.isValidLocalHost(address.getHostAddress()));
}
@Test
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 59cdd5c..ca21e4b 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -343,6 +343,9 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
String hostToRegistry = ConfigUtils.getSystemProperty(Constants.DUBBO_IP_TO_REGISTRY);
if (StringUtils.isEmpty(hostToRegistry)) {
hostToRegistry = NetUtils.getLocalHost();
+ } else if (NetUtils.isInvalidLocalHost(hostToRegistry)) {
+ throw new IllegalArgumentException("Specified invalid registry ip from property:" +
+ Constants.DUBBO_IP_TO_REGISTRY + ", value:" + hostToRegistry);
}
map.put(Constants.REGISTER_IP_KEY, hostToRegistry);
appendParameters(map, monitor);
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 18008b9..fe0f43a 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -55,6 +55,7 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
+import static org.apache.dubbo.common.utils.NetUtils.isInvalidLocalHost;
/**
* ReferenceConfig
@@ -107,7 +108,7 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
* The interface class of the reference service
*/
private Class<?> interfaceClass;
-
+
/**
* client type
*/
@@ -303,6 +304,8 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
String hostToRegistry = ConfigUtils.getSystemProperty(Constants.DUBBO_IP_TO_REGISTRY);
if (StringUtils.isEmpty(hostToRegistry)) {
hostToRegistry = NetUtils.getLocalHost();
+ } else if (isInvalidLocalHost(hostToRegistry)) {
+ throw new IllegalArgumentException("Specified invalid registry ip from property:" + Constants.DUBBO_IP_TO_REGISTRY + ", value:" + hostToRegistry);
}
map.put(Constants.REGISTER_IP_KEY, hostToRegistry);
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 9e24ac9..602b5d4 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
@@ -44,9 +44,11 @@ import org.apache.dubbo.rpc.service.GenericService;
import org.apache.dubbo.rpc.support.ProtocolUtils;
import java.lang.reflect.Method;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -62,6 +64,7 @@ import java.util.concurrent.TimeUnit;
import static org.apache.dubbo.common.Constants.LOCALHOST_VALUE;
import static org.apache.dubbo.common.utils.NetUtils.getAvailablePort;
import static org.apache.dubbo.common.utils.NetUtils.getLocalHost;
+import static org.apache.dubbo.common.utils.NetUtils.isInvalidLocalHost;
import static org.apache.dubbo.common.utils.NetUtils.isInvalidPort;
/**
@@ -624,6 +627,9 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
boolean anyhost = false;
String hostToBind = getValueFromConfig(protocolConfig, Constants.DUBBO_IP_TO_BIND);
+ if (hostToBind != null && hostToBind.length() > 0 && isInvalidLocalHost(hostToBind)) {
+ throw new IllegalArgumentException("Specified invalid bind ip from property:" + Constants.DUBBO_IP_TO_BIND + ", value:" + hostToBind);
+ }
// if bind ip is not found in environment, keep looking up
if (StringUtils.isEmpty(hostToBind)) {
@@ -631,13 +637,33 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
if (provider != null && StringUtils.isEmpty(hostToBind)) {
hostToBind = provider.getHost();
}
-
- if (StringUtils.isEmpty(hostToBind)) {
+ if (isInvalidLocalHost(hostToBind)) {
anyhost = true;
- hostToBind = getLocalHost();
-
- if (StringUtils.isEmpty(hostToBind)) {
- hostToBind = findHostToBindByConnectRegistries(registryURLs);
+ try {
+ hostToBind = InetAddress.getLocalHost().getHostAddress();
+ } catch (UnknownHostException e) {
+ logger.warn(e.getMessage(), e);
+ }
+ if (isInvalidLocalHost(hostToBind)) {
+ if (CollectionUtils.isNotEmpty(registryURLs)) {
+ for (URL registryURL : registryURLs) {
+ if (Constants.MULTICAST.equalsIgnoreCase(registryURL.getParameter("registry"))) {
+ // skip multicast registry since we cannot connect to it via Socket
+ continue;
+ }
+ try (Socket socket = new Socket()) {
+ SocketAddress addr = new InetSocketAddress(registryURL.getHost(), registryURL.getPort());
+ socket.connect(addr, 1000);
+ hostToBind = socket.getLocalAddress().getHostAddress();
+ break;
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+ }
+ if (isInvalidLocalHost(hostToBind)) {
+ hostToBind = getLocalHost();
+ }
}
}
}
@@ -646,7 +672,9 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
// registry ip is not used for bind ip by default
String hostToRegistry = getValueFromConfig(protocolConfig, Constants.DUBBO_IP_TO_REGISTRY);
- if (StringUtils.isEmpty(hostToRegistry)) {
+ if (hostToRegistry != null && hostToRegistry.length() > 0 && isInvalidLocalHost(hostToRegistry)) {
+ throw new IllegalArgumentException("Specified invalid registry ip from property:" + Constants.DUBBO_IP_TO_REGISTRY + ", value:" + hostToRegistry);
+ } else if (StringUtils.isEmpty(hostToRegistry)) {
// bind ip is used as registry ip by default
hostToRegistry = hostToBind;
}
@@ -656,25 +684,6 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
return hostToRegistry;
}
- private String findHostToBindByConnectRegistries(List<URL> registryURLs) {
- if (CollectionUtils.isNotEmpty(registryURLs)) {
- for (URL registryURL : registryURLs) {
- if (Constants.MULTICAST.equalsIgnoreCase(registryURL.getParameter(Constants.REGISTRY_KEY))) {
- // skip multicast registry since we cannot connect to it via Socket
- continue;
- }
- try (Socket socket = new Socket()) {
- SocketAddress addr = new InetSocketAddress(registryURL.getHost(), registryURL.getPort());
- socket.connect(addr, 1000);
- return socket.getLocalAddress().getHostAddress();
- } catch (Exception e) {
- logger.warn(e.getMessage(), e);
- }
- }
- }
- return null;
- }
-
/**
* Register port and bind port for the provider, can be configured separately
* Configuration priority: environment variable -> java system properties -> port property in protocol config file