From b58c5f71ecf1f17ef8295c3f5d7f15a95de125d1 Mon Sep 17 00:00:00 2001 From: Prabhat Singh Yadav Date: Fri, 24 Jul 2026 20:45:52 +0530 Subject: [PATCH 1/4] HDDS-15777. Add IPv6-aware host/port parsing helpers in HddsUtils --- .../org/apache/hadoop/hdds/HddsUtils.java | 22 +++++++++++++++++++ .../org/apache/hadoop/hdds/TestHddsUtils.java | 12 ++++++++++ .../ozone/admin/nssummary/NSSummaryAdmin.java | 9 ++++---- .../admin/om/DecommissionOMSubcommand.java | 3 ++- .../ozone/insight/BaseInsightSubCommand.java | 14 +++++++----- .../insight/TestBaseInsightSubCommand.java | 15 +++++++++++++ 6 files changed, 64 insertions(+), 11 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java index 335b8934c21d..956954fe64fc 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java @@ -228,6 +228,28 @@ public static OptionalInt getHostPort(String value) { } } + /** + * Extract the host from a host:port address string. + * IPv6-aware; accepts bracketed literals such as {@code [2001:db8::1]:9862}. + * + * @param address address in host:port format + * @return the host component without brackets + */ + public static String getHostOnly(String address) { + return NetUtils.createSocketAddr(address).getHostString(); + } + + /** + * Extract the port from a host:port address string. + * IPv6-aware; accepts bracketed literals such as {@code [2001:db8::1]:9862}. + * + * @param address address in host:port format + * @return the port component as a decimal string + */ + public static String getPort(String address) { + return String.valueOf(NetUtils.createSocketAddr(address).getPort()); + } + /** * Combine a host and port into a "host:port" string, wrapping the host in * square brackets when it is an IPv6 literal (for example diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java index 95e2cb2d5645..636b6c495406 100644 --- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java @@ -74,6 +74,18 @@ void testGetHostPortString() { assertEquals("[2001:db8::1]:9858", HddsUtils.getHostPortString("[2001:db8::1]", 9858)); } + @Test + void testGetHostOnlyAndGetPort() { + assertEquals("0.0.0.0", HddsUtils.getHostOnly("0.0.0.0:9876")); + assertEquals("9876", HddsUtils.getPort("0.0.0.0:9876")); + + assertEquals("localhost", HddsUtils.getHostOnly("localhost:9862")); + assertEquals("9862", HddsUtils.getPort("localhost:9862")); + + assertEquals("2001:db8:0:0:0:0:0:1", HddsUtils.getHostOnly("[2001:db8::1]:9862")); + assertEquals("9862", HddsUtils.getPort("[2001:db8::1]:9862")); + } + static List validPaths() { return Arrays.asList( Arguments.of("/", "/"), diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java index d6f8a636ce73..01c0f8d867f8 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java @@ -26,7 +26,7 @@ import static org.apache.hadoop.hdds.server.http.HttpConfig.getHttpPolicy; import static org.apache.hadoop.hdds.server.http.HttpServer2.HTTPS_SCHEME; import static org.apache.hadoop.hdds.server.http.HttpServer2.HTTP_SCHEME; - +import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.cli.AdminSubcommand; import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.hdds.conf.ConfigurationSource; @@ -59,14 +59,14 @@ public class NSSummaryAdmin implements AdminSubcommand { * e.g. Input: "0.0.0.0:9891" -> Output: "0.0.0.0" */ private String getHostOnly(String host) { - return host.split(":", 2)[0]; + return HddsUtils.getHostOnly(host); } /** * e.g. Input: "0.0.0.0:9891" -> Output: "9891" */ private String getPort(String host) { - return host.split(":", 2)[1]; + return HddsUtils.getPort(host); } public String getReconWebAddress() { @@ -95,7 +95,8 @@ public String getReconWebAddress() { // Fallback to : final String rpcHost = conf.get(OZONE_RECON_ADDRESS_KEY, OZONE_RECON_ADDRESS_DEFAULT); - host = getHostOnly(rpcHost) + ":" + getPort(host); + host = HddsUtils.getHostPortString(getHostOnly(rpcHost), + Integer.parseInt(getPort(host))); } return protocol + "://" + host; diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java index 3da4c0c043b2..ef4b475f95de 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.concurrent.Callable; import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OmUtils; @@ -134,7 +135,7 @@ private void verifyNodeIdAndHostAddress() throws IOException { hostInetAddress = InetAddress.getByName(hostname); InetAddress rpcAddressFromConfig = InetAddress.getByName( - rpcAddrStr.split(":")[0]); + HddsUtils.getHostOnly(rpcAddrStr)); if (!hostInetAddress.equals(rpcAddressFromConfig)) { throw new IOException("OM " + decommNodeId + "'s host address in " + diff --git a/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java b/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java index 3d5ff688e659..9f9f829483fd 100644 --- a/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java +++ b/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java @@ -77,11 +77,11 @@ public InsightPoint getInsight(OzoneConfiguration configuration, public String getHost(OzoneConfiguration conf, Component component) { HttpConfig.Policy policy = HttpConfig.getHttpPolicy(conf); String protocol = policy.isHttpsEnabled() ? HTTPS_SCHEME : HTTP_SCHEME; - + if (component.getHostname() != null) { return protocol + "://" + component.getHostname() + ":" + component.getPort(); } - + String address = getComponentAddress(conf, component.getName(), policy); return protocol + "://" + address; } @@ -110,7 +110,8 @@ private String getComponentAddress(OzoneConfiguration conf, ScmConfigKeys.OZONE_SCM_BLOCK_CLIENT_ADDRESS_KEY, ScmConfigKeys.OZONE_SCM_CLIENT_ADDRESS_KEY); if (scmHost.isPresent()) { - return scmHost.get() + ":" + getPort(address); + return HddsUtils.getHostPortString(scmHost.get(), + Integer.parseInt(getPort(address))); } } return address; @@ -129,7 +130,8 @@ private String getComponentAddress(OzoneConfiguration conf, Optional omHost = HddsUtils.getHostNameFromConfigKeys(conf, OMConfigKeys.OZONE_OM_ADDRESS_KEY); if (omHost.isPresent()) { - return omHost.get() + ":" + getPort(address); + return HddsUtils.getHostPortString(omHost.get(), + Integer.parseInt(getPort(address))); } } return address; @@ -145,7 +147,7 @@ private String getComponentAddress(OzoneConfiguration conf, * e.g. Input: "0.0.0.0:9876" -> Output: "0.0.0.0" */ private String getHostOnly(String address) { - return address.split(":", 2)[0]; + return HddsUtils.getHostOnly(address); } /** @@ -153,7 +155,7 @@ private String getHostOnly(String address) { * e.g. Input: "0.0.0.0:9876" -> Output: "9876" */ private String getPort(String address) { - return address.split(":", 2)[1]; + return HddsUtils.getPort(address); } public Map createInsightPoints( diff --git a/hadoop-ozone/insight/src/test/java/org/apache/hadoop/ozone/insight/TestBaseInsightSubCommand.java b/hadoop-ozone/insight/src/test/java/org/apache/hadoop/ozone/insight/TestBaseInsightSubCommand.java index 9b7e6ef075d0..f37c34cdbfeb 100644 --- a/hadoop-ozone/insight/src/test/java/org/apache/hadoop/ozone/insight/TestBaseInsightSubCommand.java +++ b/hadoop-ozone/insight/src/test/java/org/apache/hadoop/ozone/insight/TestBaseInsightSubCommand.java @@ -99,4 +99,19 @@ public void testFallbackToRpcAddress() { assertEquals("https://om-host:" + OMConfigKeys.OZONE_OM_HTTPS_BIND_PORT_DEFAULT, command.getHost(conf, new Component(Type.OM, null))); } + + @Test + public void testFallbackToIpv6RpcAddress() { + OzoneConfiguration conf = new OzoneConfiguration(); + conf.set(OzoneConfigKeys.OZONE_HTTP_POLICY_KEY, "HTTP_ONLY"); + conf.set(ScmConfigKeys.OZONE_SCM_CLIENT_ADDRESS_KEY, "[2001:db8::1]:9860"); + conf.set(OMConfigKeys.OZONE_OM_ADDRESS_KEY, "[2001:db8::2]:9862"); + + BaseInsightSubCommand command = new BaseInsightSubCommand(); + + assertEquals("http://[2001:db8::1]:" + ScmConfigKeys.OZONE_SCM_HTTP_BIND_PORT_DEFAULT, + command.getHost(conf, new Component(Type.SCM, null))); + assertEquals("http://[2001:db8::2]:" + OMConfigKeys.OZONE_OM_HTTP_BIND_PORT_DEFAULT, + command.getHost(conf, new Component(Type.OM, null))); + } } From e6ff6819cc10b8465407e3837c1e5c1eef627ea5 Mon Sep 17 00:00:00 2001 From: Prabhat Singh Yadav Date: Fri, 24 Jul 2026 21:15:47 +0530 Subject: [PATCH 2/4] fix checkstyle --- .../org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java index 01c0f8d867f8..d9535d377aac 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java @@ -26,6 +26,7 @@ import static org.apache.hadoop.hdds.server.http.HttpConfig.getHttpPolicy; import static org.apache.hadoop.hdds.server.http.HttpServer2.HTTPS_SCHEME; import static org.apache.hadoop.hdds.server.http.HttpServer2.HTTP_SCHEME; + import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.cli.AdminSubcommand; import org.apache.hadoop.hdds.cli.HddsVersionProvider; From 3201ff6716ead5c1493bf418ac1c8e23435e8efb Mon Sep 17 00:00:00 2001 From: Prabhat Singh Yadav Date: Wed, 29 Jul 2026 20:24:22 +0530 Subject: [PATCH 3/4] HDDS-15777: changes done based on comments --- .../org/apache/hadoop/hdds/HddsUtils.java | 24 +--------- .../org/apache/hadoop/hdds/TestHddsUtils.java | 26 +++++----- .../ozone/admin/nssummary/NSSummaryAdmin.java | 31 +++++------- .../admin/om/DecommissionOMSubcommand.java | 2 +- .../ozone/insight/BaseInsightSubCommand.java | 47 ++++++++----------- .../ozone/recon/TestReconEndpointUtil.java | 25 +++++----- 6 files changed, 58 insertions(+), 97 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java index 956954fe64fc..750c0dd5eabf 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java @@ -203,7 +203,7 @@ public static Optional getHostName(String value) { if ((value == null) || value.isEmpty()) { return Optional.empty(); } - String hostname = value.replaceAll("\\:[0-9]+$", ""); + String hostname = HostAndPort.fromString(value).getHost(); if (hostname.isEmpty()) { return Optional.empty(); } else { @@ -228,28 +228,6 @@ public static OptionalInt getHostPort(String value) { } } - /** - * Extract the host from a host:port address string. - * IPv6-aware; accepts bracketed literals such as {@code [2001:db8::1]:9862}. - * - * @param address address in host:port format - * @return the host component without brackets - */ - public static String getHostOnly(String address) { - return NetUtils.createSocketAddr(address).getHostString(); - } - - /** - * Extract the port from a host:port address string. - * IPv6-aware; accepts bracketed literals such as {@code [2001:db8::1]:9862}. - * - * @param address address in host:port format - * @return the port component as a decimal string - */ - public static String getPort(String address) { - return String.valueOf(NetUtils.createSocketAddr(address).getPort()); - } - /** * Combine a host and port into a "host:port" string, wrapping the host in * square brackets when it is an IPv6 literal (for example diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java index 636b6c495406..45435fbcb523 100644 --- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestHddsUtils.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.OptionalInt; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.ScmConfigKeys; @@ -57,6 +58,19 @@ void testGetHostName() { assertEquals(Optional.empty(), HddsUtils.getHostName(":1234")); + + assertEquals(Optional.of("2001:db8::1"), + HddsUtils.getHostName("[2001:db8::1]:9862")); + assertEquals(Optional.of("0.0.0.0"), + HddsUtils.getHostName("0.0.0.0:9876")); + } + + @Test + void testGetHostPort() { + assertEquals(OptionalInt.of(9876), HddsUtils.getHostPort("0.0.0.0:9876")); + assertEquals(OptionalInt.of(9862), HddsUtils.getHostPort("localhost:9862")); + assertEquals(OptionalInt.of(9862), HddsUtils.getHostPort("[2001:db8::1]:9862")); + assertEquals(OptionalInt.empty(), HddsUtils.getHostPort("localhost")); } @Test @@ -74,18 +88,6 @@ void testGetHostPortString() { assertEquals("[2001:db8::1]:9858", HddsUtils.getHostPortString("[2001:db8::1]", 9858)); } - @Test - void testGetHostOnlyAndGetPort() { - assertEquals("0.0.0.0", HddsUtils.getHostOnly("0.0.0.0:9876")); - assertEquals("9876", HddsUtils.getPort("0.0.0.0:9876")); - - assertEquals("localhost", HddsUtils.getHostOnly("localhost:9862")); - assertEquals("9862", HddsUtils.getPort("localhost:9862")); - - assertEquals("2001:db8:0:0:0:0:0:1", HddsUtils.getHostOnly("[2001:db8::1]:9862")); - assertEquals("9862", HddsUtils.getPort("[2001:db8::1]:9862")); - } - static List validPaths() { return Arrays.asList( Arguments.of("/", "/"), diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java index d9535d377aac..7fa3046355c1 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/nssummary/NSSummaryAdmin.java @@ -27,6 +27,8 @@ import static org.apache.hadoop.hdds.server.http.HttpServer2.HTTPS_SCHEME; import static org.apache.hadoop.hdds.server.http.HttpServer2.HTTP_SCHEME; +import java.util.Optional; +import java.util.OptionalInt; import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.cli.AdminSubcommand; import org.apache.hadoop.hdds.cli.HddsVersionProvider; @@ -56,20 +58,6 @@ public class NSSummaryAdmin implements AdminSubcommand { @CommandLine.ParentCommand private OzoneAdmin parent; - /** - * e.g. Input: "0.0.0.0:9891" -> Output: "0.0.0.0" - */ - private String getHostOnly(String host) { - return HddsUtils.getHostOnly(host); - } - - /** - * e.g. Input: "0.0.0.0:9891" -> Output: "9891" - */ - private String getPort(String host) { - return HddsUtils.getPort(host); - } - public String getReconWebAddress() { final OzoneConfiguration conf = parent.getOzoneConf(); final String protocol; @@ -82,22 +70,25 @@ public String getReconWebAddress() { protocol = HTTPS_SCHEME; host = conf.get(OZONE_RECON_HTTPS_ADDRESS_KEY, OZONE_RECON_HTTPS_ADDRESS_DEFAULT); - isHostDefault = getHostOnly(host).equals( - getHostOnly(OZONE_RECON_HTTPS_ADDRESS_DEFAULT)); + isHostDefault = HddsUtils.getHostName(host) + .equals(HddsUtils.getHostName(OZONE_RECON_HTTPS_ADDRESS_DEFAULT)); } else { protocol = HTTP_SCHEME; host = conf.get(OZONE_RECON_HTTP_ADDRESS_KEY, OZONE_RECON_HTTP_ADDRESS_DEFAULT); - isHostDefault = getHostOnly(host).equals( - getHostOnly(OZONE_RECON_HTTP_ADDRESS_DEFAULT)); + isHostDefault = HddsUtils.getHostName(host) + .equals(HddsUtils.getHostName(OZONE_RECON_HTTP_ADDRESS_DEFAULT)); } if (isHostDefault) { // Fallback to : final String rpcHost = conf.get(OZONE_RECON_ADDRESS_KEY, OZONE_RECON_ADDRESS_DEFAULT); - host = HddsUtils.getHostPortString(getHostOnly(rpcHost), - Integer.parseInt(getPort(host))); + Optional rpcHostName = HddsUtils.getHostName(rpcHost); + OptionalInt port = HddsUtils.getHostPort(host); + if (rpcHostName.isPresent() && port.isPresent()) { + host = HddsUtils.getHostPortString(rpcHostName.get(), port.getAsInt()); + } } return protocol + "://" + host; diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java index ef4b475f95de..bc1666bf45f2 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/DecommissionOMSubcommand.java @@ -135,7 +135,7 @@ private void verifyNodeIdAndHostAddress() throws IOException { hostInetAddress = InetAddress.getByName(hostname); InetAddress rpcAddressFromConfig = InetAddress.getByName( - HddsUtils.getHostOnly(rpcAddrStr)); + HddsUtils.getHostName(rpcAddrStr).orElse("")); if (!hostInetAddress.equals(rpcAddressFromConfig)) { throw new IOException("OM " + decommNodeId + "'s host address in " + diff --git a/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java b/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java index 9f9f829483fd..5cd7fe550bef 100644 --- a/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java +++ b/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java @@ -33,6 +33,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; +import java.util.OptionalInt; import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.ScmConfigKeys; @@ -77,11 +78,11 @@ public InsightPoint getInsight(OzoneConfiguration configuration, public String getHost(OzoneConfiguration conf, Component component) { HttpConfig.Policy policy = HttpConfig.getHttpPolicy(conf); String protocol = policy.isHttpsEnabled() ? HTTPS_SCHEME : HTTP_SCHEME; - + if (component.getHostname() != null) { return protocol + "://" + component.getHostname() + ":" + component.getPort(); } - + String address = getComponentAddress(conf, component.getName(), policy); return protocol + "://" + address; } @@ -95,7 +96,7 @@ private String getComponentAddress(OzoneConfiguration conf, String address; switch (componentType) { - case SCM: + case SCM: { if (isHttpsEnabled) { address = conf.get(OZONE_SCM_HTTPS_ADDRESS_KEY, OZONE_SCM_HTTP_BIND_HOST_DEFAULT + ":" + OZONE_SCM_HTTPS_BIND_PORT_DEFAULT); @@ -105,18 +106,21 @@ private String getComponentAddress(OzoneConfiguration conf, } // Fallback to RPC hostname - if (getHostOnly(address).equals(OZONE_SCM_HTTP_BIND_HOST_DEFAULT)) { + Optional bindHost = HddsUtils.getHostName(address); + if (bindHost.isPresent() + && bindHost.get().equals(OZONE_SCM_HTTP_BIND_HOST_DEFAULT)) { Optional scmHost = HddsUtils.getHostNameFromConfigKeys(conf, ScmConfigKeys.OZONE_SCM_BLOCK_CLIENT_ADDRESS_KEY, ScmConfigKeys.OZONE_SCM_CLIENT_ADDRESS_KEY); - if (scmHost.isPresent()) { - return HddsUtils.getHostPortString(scmHost.get(), - Integer.parseInt(getPort(address))); + OptionalInt port = HddsUtils.getHostPort(address); + if (scmHost.isPresent() && port.isPresent()) { + return HddsUtils.getHostPortString(scmHost.get(), port.getAsInt()); } } return address; + } - case OM: + case OM: { if (isHttpsEnabled) { address = conf.get(OZONE_OM_HTTPS_ADDRESS_KEY, OZONE_OM_HTTP_BIND_HOST_DEFAULT + ":" + OZONE_OM_HTTPS_BIND_PORT_DEFAULT); @@ -126,15 +130,18 @@ private String getComponentAddress(OzoneConfiguration conf, } // Fallback to RPC hostname - if (getHostOnly(address).equals(OZONE_OM_HTTP_BIND_HOST_DEFAULT)) { + Optional bindHost = HddsUtils.getHostName(address); + if (bindHost.isPresent() + && bindHost.get().equals(OZONE_OM_HTTP_BIND_HOST_DEFAULT)) { Optional omHost = HddsUtils.getHostNameFromConfigKeys(conf, OMConfigKeys.OZONE_OM_ADDRESS_KEY); - if (omHost.isPresent()) { - return HddsUtils.getHostPortString(omHost.get(), - Integer.parseInt(getPort(address))); + OptionalInt port = HddsUtils.getHostPort(address); + if (omHost.isPresent() && port.isPresent()) { + return HddsUtils.getHostPortString(omHost.get(), port.getAsInt()); } } return address; + } default: throw new IllegalArgumentException( @@ -142,22 +149,6 @@ private String getComponentAddress(OzoneConfiguration conf, } } - /** - * Extract hostname from address string. - * e.g. Input: "0.0.0.0:9876" -> Output: "0.0.0.0" - */ - private String getHostOnly(String address) { - return HddsUtils.getHostOnly(address); - } - - /** - * Extract port from address string. - * e.g. Input: "0.0.0.0:9876" -> Output: "9876" - */ - private String getPort(String address) { - return HddsUtils.getPort(address); - } - public Map createInsightPoints( OzoneConfiguration configuration) { Map insights = new LinkedHashMap<>(); diff --git a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconEndpointUtil.java b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconEndpointUtil.java index 4acafc105817..b690b3473fb7 100644 --- a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconEndpointUtil.java +++ b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconEndpointUtil.java @@ -37,7 +37,10 @@ import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.Optional; +import java.util.OptionalInt; import org.apache.commons.io.IOUtils; +import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.server.http.HttpConfig; import org.apache.hadoop.hdfs.web.URLConnectionFactory; @@ -150,34 +153,30 @@ public static String getReconWebAddress(OzoneConfiguration conf) { protocol = HTTPS_SCHEME; host = conf.get(OZONE_RECON_HTTPS_ADDRESS_KEY, OZONE_RECON_HTTPS_ADDRESS_DEFAULT); - isHostDefault = getHostOnly(host).equals( - getHostOnly(OZONE_RECON_HTTPS_ADDRESS_DEFAULT)); + isHostDefault = HddsUtils.getHostName(host) + .equals(HddsUtils.getHostName(OZONE_RECON_HTTPS_ADDRESS_DEFAULT)); } else { protocol = HTTP_SCHEME; host = conf.get(OZONE_RECON_HTTP_ADDRESS_KEY, OZONE_RECON_HTTP_ADDRESS_DEFAULT); - isHostDefault = getHostOnly(host).equals( - getHostOnly(OZONE_RECON_HTTP_ADDRESS_DEFAULT)); + isHostDefault = HddsUtils.getHostName(host) + .equals(HddsUtils.getHostName(OZONE_RECON_HTTP_ADDRESS_DEFAULT)); } if (isHostDefault) { // Fallback to : final String rpcHost = conf.get(OZONE_RECON_ADDRESS_KEY, OZONE_RECON_ADDRESS_DEFAULT); - host = getHostOnly(rpcHost) + ":" + getPort(host); + Optional rpcHostName = HddsUtils.getHostName(rpcHost); + OptionalInt port = HddsUtils.getHostPort(host); + if (rpcHostName.isPresent() && port.isPresent()) { + host = HddsUtils.getHostPortString(rpcHostName.get(), port.getAsInt()); + } } return protocol + "://" + host; } - public static String getHostOnly(String host) { - return host.split(":", 2)[0]; - } - - public static String getPort(String host) { - return host.split(":", 2)[1]; - } - public static boolean isHTTPSEnabled(OzoneConfiguration conf) { return getHttpPolicy(conf) == HttpConfig.Policy.HTTPS_ONLY; } From 01c0c9523c033d2302b1346aa1018da549985315 Mon Sep 17 00:00:00 2001 From: Prabhat Singh Yadav Date: Wed, 29 Jul 2026 21:09:36 +0530 Subject: [PATCH 4/4] HDDS-15777. Fix checkstyle AvoidNestedBlocks in BaseInsightSubCommand --- .../ozone/insight/BaseInsightSubCommand.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java b/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java index 5cd7fe550bef..4a20da99f4fd 100644 --- a/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java +++ b/hadoop-ozone/insight/src/main/java/org/apache/hadoop/ozone/insight/BaseInsightSubCommand.java @@ -96,7 +96,7 @@ private String getComponentAddress(OzoneConfiguration conf, String address; switch (componentType) { - case SCM: { + case SCM: if (isHttpsEnabled) { address = conf.get(OZONE_SCM_HTTPS_ADDRESS_KEY, OZONE_SCM_HTTP_BIND_HOST_DEFAULT + ":" + OZONE_SCM_HTTPS_BIND_PORT_DEFAULT); @@ -106,21 +106,20 @@ private String getComponentAddress(OzoneConfiguration conf, } // Fallback to RPC hostname - Optional bindHost = HddsUtils.getHostName(address); - if (bindHost.isPresent() - && bindHost.get().equals(OZONE_SCM_HTTP_BIND_HOST_DEFAULT)) { + Optional scmBindHost = HddsUtils.getHostName(address); + if (scmBindHost.isPresent() + && scmBindHost.get().equals(OZONE_SCM_HTTP_BIND_HOST_DEFAULT)) { Optional scmHost = HddsUtils.getHostNameFromConfigKeys(conf, ScmConfigKeys.OZONE_SCM_BLOCK_CLIENT_ADDRESS_KEY, ScmConfigKeys.OZONE_SCM_CLIENT_ADDRESS_KEY); - OptionalInt port = HddsUtils.getHostPort(address); - if (scmHost.isPresent() && port.isPresent()) { - return HddsUtils.getHostPortString(scmHost.get(), port.getAsInt()); + OptionalInt scmPort = HddsUtils.getHostPort(address); + if (scmHost.isPresent() && scmPort.isPresent()) { + return HddsUtils.getHostPortString(scmHost.get(), scmPort.getAsInt()); } } return address; - } - case OM: { + case OM: if (isHttpsEnabled) { address = conf.get(OZONE_OM_HTTPS_ADDRESS_KEY, OZONE_OM_HTTP_BIND_HOST_DEFAULT + ":" + OZONE_OM_HTTPS_BIND_PORT_DEFAULT); @@ -130,18 +129,17 @@ private String getComponentAddress(OzoneConfiguration conf, } // Fallback to RPC hostname - Optional bindHost = HddsUtils.getHostName(address); - if (bindHost.isPresent() - && bindHost.get().equals(OZONE_OM_HTTP_BIND_HOST_DEFAULT)) { + Optional omBindHost = HddsUtils.getHostName(address); + if (omBindHost.isPresent() + && omBindHost.get().equals(OZONE_OM_HTTP_BIND_HOST_DEFAULT)) { Optional omHost = HddsUtils.getHostNameFromConfigKeys(conf, OMConfigKeys.OZONE_OM_ADDRESS_KEY); - OptionalInt port = HddsUtils.getHostPort(address); - if (omHost.isPresent() && port.isPresent()) { - return HddsUtils.getHostPortString(omHost.get(), port.getAsInt()); + OptionalInt omPort = HddsUtils.getHostPort(address); + if (omHost.isPresent() && omPort.isPresent()) { + return HddsUtils.getHostPortString(omHost.get(), omPort.getAsInt()); } } return address; - } default: throw new IllegalArgumentException(