From 4bee21e96b45422cf3e485d3cf12a0935cd8d6e9 Mon Sep 17 00:00:00 2001 From: tianhang Date: Mon, 27 Feb 2023 20:11:42 +0800 Subject: [PATCH] HBASE-27660 Ignore invalid hostname when getNetworkInterfaces (#5052) Signed-off-by: Duo Zhang --- .../TestRegionServerHostname.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java index 1acc926bc90..566b85b01e9 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue; import java.net.InetAddress; import java.net.NetworkInterface; +import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Locale; @@ -89,9 +90,7 @@ public class TestRegionServerHostname { @Test public void testRegionServerHostname() throws Exception { - Enumeration netInterfaceList = NetworkInterface.getNetworkInterfaces(); - while (netInterfaceList.hasMoreElements()) { - NetworkInterface ni = netInterfaceList.nextElement(); + for (NetworkInterface ni : getValidNetworkInterfaces()) { Enumeration addrList = ni.getInetAddresses(); // iterate through host addresses and use each as hostname while (addrList.hasMoreElements()) { @@ -205,4 +204,22 @@ public class TestRegionServerHostname { assertEquals(expectedRS, servers.size()); } } + + private boolean ignoreNetworkInterface(NetworkInterface networkInterface) throws Exception { + return networkInterface == null || networkInterface.isLoopback() || networkInterface.isVirtual() + || !networkInterface.isUp(); + } + + private List getValidNetworkInterfaces() throws Exception { + List validNetworkInterfaces = new ArrayList<>(); + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface networkInterface = interfaces.nextElement(); + if (ignoreNetworkInterface(networkInterface)) { + continue; + } + validNetworkInterfaces.add(networkInterface); + } + return validNetworkInterfaces; + } }