This is an automated email from the ASF dual-hosted git repository.
iluo 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 74a491b improve NetUtils (#3953)
74a491b is described below
commit 74a491ba4304c5ea07bd0016ab6c135b80abd651
Author: xujingfeng <[email protected]>
AuthorDate: Sun May 5 15:00:40 2019 +0800
improve NetUtils (#3953)
* 1. filter network interface in NetUtils 2. remove the useless attribute
in ApplicationConfig
* add reachable check for ipv4
* move the reachable check to outside
* rename isValidV6Address to isPreferIPV6Address
---
.../org/apache/dubbo/common/utils/NetUtils.java | 26 +++++++++++++---------
.../apache/dubbo/common/utils/NetUtilsTest.java | 2 +-
.../org/apache/dubbo/config/ApplicationConfig.java | 11 ---------
.../apache/dubbo/demo/provider/Application.java | 3 ++-
4 files changed, 18 insertions(+), 24 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 3119e5c..e5b85ec 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
@@ -128,28 +128,23 @@ public class NetUtils {
return false;
}
String name = address.getHostAddress();
- return (name != null
+ boolean result = (name != null
&& IP_PATTERN.matcher(name).matches()
&& !Constants.ANYHOST_VALUE.equals(name)
&& !Constants.LOCALHOST_VALUE.equals(name));
+ return result;
}
/**
- * Check if an ipv6 address is reachable.
+ * Check if an ipv6 address
*
- * @param address the given address
* @return true if it is reachable
*/
- static boolean isValidV6Address(Inet6Address address) {
+ static boolean isPreferIPV6Address() {
boolean preferIpv6 =
Boolean.getBoolean("java.net.preferIPv6Addresses");
if (!preferIpv6) {
return false;
}
- try {
- return address.isReachable(100);
- } catch (IOException e) {
- // ignore
- }
return false;
}
@@ -234,7 +229,7 @@ public class NetUtils {
private static Optional<InetAddress> toValidAddress(InetAddress address) {
if (address instanceof Inet6Address) {
Inet6Address v6Address = (Inet6Address) address;
- if (isValidV6Address(v6Address)) {
+ if (isPreferIPV6Address()) {
return Optional.ofNullable(normalizeV6Address(v6Address));
}
}
@@ -264,12 +259,21 @@ public class NetUtils {
while (interfaces.hasMoreElements()) {
try {
NetworkInterface network = interfaces.nextElement();
+ if (network.isLoopback() || network.isVirtual() ||
!network.isUp()) {
+ continue;
+ }
Enumeration<InetAddress> addresses =
network.getInetAddresses();
while (addresses.hasMoreElements()) {
try {
Optional<InetAddress> addressOp =
toValidAddress(addresses.nextElement());
if (addressOp.isPresent()) {
- return addressOp.get();
+ try {
+ if(addressOp.get().isReachable(100)){
+ return addressOp.get();
+ }
+ } catch (IOException e) {
+ // ignore
+ }
}
} catch (Throwable e) {
logger.warn(e);
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 797f2b4..5def6c7 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
@@ -191,7 +191,7 @@ public class NetUtilsTest {
System.setProperty("java.net.preferIPv6Addresses", "true");
InetAddress address = NetUtils.getLocalAddress();
if (address instanceof Inet6Address) {
- assertThat(NetUtils.isValidV6Address((Inet6Address) address),
equalTo(true));
+ assertThat(NetUtils.isPreferIPV6Address(), equalTo(true));
}
System.setProperty("java.net.preferIPv6Addresses", saved);
}
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
index 984733f..2775d0d 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
@@ -123,10 +123,6 @@ public class ApplicationConfig extends AbstractConfig {
*/
private String shutwait;
-
- private Boolean preferPublicIp;
-
-
public ApplicationConfig() {
}
@@ -331,11 +327,4 @@ public class ApplicationConfig extends AbstractConfig {
return !StringUtils.isEmpty(name);
}
- public Boolean getPreferPublicIp() {
- return preferPublicIp;
- }
-
- public void setPreferPublicIp(Boolean preferPublicIp) {
- this.preferPublicIp = preferPublicIp;
- }
}
\ No newline at end of file
diff --git
a/dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
b/dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
index 857e03f..c453d1b 100644
---
a/dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
+++
b/dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
@@ -29,9 +29,10 @@ public class Application {
* launch the application
*/
public static void main(String[] args) throws Exception {
+ System.setProperty("DUBBO_IP_TO_REGISTRY", "4.3.2.1");
ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
service.setApplication(new
ApplicationConfig("dubbo-demo-api-provider"));
- service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
+ service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
service.setInterface(DemoService.class);
service.setRef(new DemoServiceImpl());
service.export();