This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 0ea48fce6f4f67edd4ead3bfd1fe5db6ab22d980 Author: laijianbin <[email protected]> AuthorDate: Fri Jun 29 00:08:30 2018 +0800 [SCB-693] registry microservice failed if failed to get host address --- .../servicecomb/foundation/common/net/NetUtils.java | 14 ++++++++++++++ .../foundation/common/net/TestNetUtils.java | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/NetUtils.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/NetUtils.java index dbe8703..a25ec9a 100644 --- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/NetUtils.java +++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/NetUtils.java @@ -55,6 +55,10 @@ public final class NetUtils { private static String hostAddress; static { + doGetHostNameAndHostAddress(); + } + + private static void doGetHostNameAndHostAddress() { try { doGetIpv4AddressFromNetworkInterface(); // getLocalHost will throw exception in some docker image and sometimes will do a hostname lookup and time consuming @@ -193,10 +197,20 @@ public final class NetUtils { } public static String getHostName() { + //If failed to get host name ,micro-service will registry failed + //So I add retry mechanism + if(hostName == null) { + doGetHostNameAndHostAddress(); + } return hostName; } public static String getHostAddress() { + //If failed to get host address ,micro-service will registry failed + //So I add retry mechanism + if(hostAddress == null) { + doGetHostNameAndHostAddress(); + } return hostAddress; } diff --git a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/net/TestNetUtils.java b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/net/TestNetUtils.java index 85eebe2..34efa4e 100644 --- a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/net/TestNetUtils.java +++ b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/net/TestNetUtils.java @@ -18,6 +18,7 @@ package org.apache.servicecomb.foundation.common.net; import java.io.IOException; +import java.lang.reflect.Field; import java.net.InetAddress; import java.net.ServerSocket; import java.util.HashMap; @@ -107,4 +108,22 @@ public class TestNetUtils { Assert.assertTrue(NetUtils.canTcpListen(address, port)); } + + @Test + public void testGetHostName() throws Exception { + Assert.assertNotEquals(null, NetUtils.getHostAddress()); + Assert.assertNotEquals(null, NetUtils.getHostName()); + + Class<?> clazz = Class.forName("org.apache.servicecomb.foundation.common.net.NetUtils"); + Field hostNameField = clazz.getDeclaredField("hostName"); + hostNameField.setAccessible(true); + hostNameField.set(NetUtils.class, null); + Assert.assertNotEquals(null, NetUtils.getHostName()); + + Field hostAddressField = clazz.getDeclaredField("hostAddress"); + hostAddressField.setAccessible(true); + hostAddressField.set(NetUtils.class, null); + Assert.assertNotEquals(null, NetUtils.getHostAddress()); + + } }
