Skip to content

Commit 74a491b

Browse files
lexburnerbeiwei30
authored andcommitted
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
1 parent ff50a29 commit 74a491b

File tree

4 files changed

+18
-24
lines changed

4 files changed

+18
-24
lines changed

dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -128,28 +128,23 @@ static boolean isValidV4Address(InetAddress address) {
128128
return false;
129129
}
130130
String name = address.getHostAddress();
131-
return (name != null
131+
boolean result = (name != null
132132
&& IP_PATTERN.matcher(name).matches()
133133
&& !Constants.ANYHOST_VALUE.equals(name)
134134
&& !Constants.LOCALHOST_VALUE.equals(name));
135+
return result;
135136
}
136137

137138
/**
138-
* Check if an ipv6 address is reachable.
139+
* Check if an ipv6 address
139140
*
140-
* @param address the given address
141141
* @return true if it is reachable
142142
*/
143-
static boolean isValidV6Address(Inet6Address address) {
143+
static boolean isPreferIPV6Address() {
144144
boolean preferIpv6 = Boolean.getBoolean("java.net.preferIPv6Addresses");
145145
if (!preferIpv6) {
146146
return false;
147147
}
148-
try {
149-
return address.isReachable(100);
150-
} catch (IOException e) {
151-
// ignore
152-
}
153148
return false;
154149
}
155150

@@ -234,7 +229,7 @@ public static InetAddress getLocalAddress() {
234229
private static Optional<InetAddress> toValidAddress(InetAddress address) {
235230
if (address instanceof Inet6Address) {
236231
Inet6Address v6Address = (Inet6Address) address;
237-
if (isValidV6Address(v6Address)) {
232+
if (isPreferIPV6Address()) {
238233
return Optional.ofNullable(normalizeV6Address(v6Address));
239234
}
240235
}
@@ -264,12 +259,21 @@ private static InetAddress getLocalAddress0() {
264259
while (interfaces.hasMoreElements()) {
265260
try {
266261
NetworkInterface network = interfaces.nextElement();
262+
if (network.isLoopback() || network.isVirtual() || !network.isUp()) {
263+
continue;
264+
}
267265
Enumeration<InetAddress> addresses = network.getInetAddresses();
268266
while (addresses.hasMoreElements()) {
269267
try {
270268
Optional<InetAddress> addressOp = toValidAddress(addresses.nextElement());
271269
if (addressOp.isPresent()) {
272-
return addressOp.get();
270+
try {
271+
if(addressOp.get().isReachable(100)){
272+
return addressOp.get();
273+
}
274+
} catch (IOException e) {
275+
// ignore
276+
}
273277
}
274278
} catch (Throwable e) {
275279
logger.warn(e);

dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public void testIsValidV6Address() {
191191
System.setProperty("java.net.preferIPv6Addresses", "true");
192192
InetAddress address = NetUtils.getLocalAddress();
193193
if (address instanceof Inet6Address) {
194-
assertThat(NetUtils.isValidV6Address((Inet6Address) address), equalTo(true));
194+
assertThat(NetUtils.isPreferIPV6Address(), equalTo(true));
195195
}
196196
System.setProperty("java.net.preferIPv6Addresses", saved);
197197
}

dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,6 @@ public class ApplicationConfig extends AbstractConfig {
123123
*/
124124
private String shutwait;
125125

126-
127-
private Boolean preferPublicIp;
128-
129-
130126
public ApplicationConfig() {
131127
}
132128

@@ -331,11 +327,4 @@ public boolean isValid() {
331327
return !StringUtils.isEmpty(name);
332328
}
333329

334-
public Boolean getPreferPublicIp() {
335-
return preferPublicIp;
336-
}
337-
338-
public void setPreferPublicIp(Boolean preferPublicIp) {
339-
this.preferPublicIp = preferPublicIp;
340-
}
341330
}

dubbo-demo/dubbo-demo-api/dubbo-demo-api-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ public class Application {
2929
* launch the application
3030
*/
3131
public static void main(String[] args) throws Exception {
32+
System.setProperty("DUBBO_IP_TO_REGISTRY", "4.3.2.1");
3233
ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
3334
service.setApplication(new ApplicationConfig("dubbo-demo-api-provider"));
34-
service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
35+
service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
3536
service.setInterface(DemoService.class);
3637
service.setRef(new DemoServiceImpl());
3738
service.export();

0 commit comments

Comments
 (0)