Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -78,6 +79,14 @@ void testGetHostName() {
() -> HddsUtils.getHostName("a:b"));
}

@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
void testGetHostPortString() {
// Hostnames and IPv4 literals are joined with a plain colon.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
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;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
Expand Down Expand Up @@ -55,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 host.split(":", 2)[0];
}

/**
* e.g. Input: "0.0.0.0:9891" -> Output: "9891"
*/
private String getPort(String host) {
return host.split(":", 2)[1];
}

public String getReconWebAddress() {
final OzoneConfiguration conf = parent.getOzoneConf();
final String protocol;
Expand All @@ -81,21 +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 <Recon RPC host name>:<Recon http(s) address port>
final String rpcHost =
conf.get(OZONE_RECON_ADDRESS_KEY, OZONE_RECON_ADDRESS_DEFAULT);
host = getHostOnly(rpcHost) + ":" + getPort(host);
Optional<String> rpcHostName = HddsUtils.getHostName(rpcHost);
OptionalInt port = HddsUtils.getHostPort(host);
if (rpcHostName.isPresent() && port.isPresent()) {
host = HddsUtils.getHostPortString(rpcHostName.get(), port.getAsInt());
}
}

return protocol + "://" + host;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -134,7 +135,7 @@ private void verifyNodeIdAndHostAddress() throws IOException {

hostInetAddress = InetAddress.getByName(hostname);
InetAddress rpcAddressFromConfig = InetAddress.getByName(
rpcAddrStr.split(":")[0]);
HddsUtils.getHostName(rpcAddrStr).orElse(""));

if (!hostInetAddress.equals(rpcAddressFromConfig)) {
throw new IOException("OM " + decommNodeId + "'s host address in " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -105,12 +106,15 @@ private String getComponentAddress(OzoneConfiguration conf,
}

// Fallback to RPC hostname
if (getHostOnly(address).equals(OZONE_SCM_HTTP_BIND_HOST_DEFAULT)) {
Optional<String> scmBindHost = HddsUtils.getHostName(address);
if (scmBindHost.isPresent()
&& scmBindHost.get().equals(OZONE_SCM_HTTP_BIND_HOST_DEFAULT)) {
Optional<String> scmHost = HddsUtils.getHostNameFromConfigKeys(conf,
ScmConfigKeys.OZONE_SCM_BLOCK_CLIENT_ADDRESS_KEY,
ScmConfigKeys.OZONE_SCM_CLIENT_ADDRESS_KEY);
if (scmHost.isPresent()) {
return scmHost.get() + ":" + getPort(address);
OptionalInt scmPort = HddsUtils.getHostPort(address);
if (scmHost.isPresent() && scmPort.isPresent()) {
return HddsUtils.getHostPortString(scmHost.get(), scmPort.getAsInt());
}
}
return address;
Expand All @@ -125,11 +129,14 @@ private String getComponentAddress(OzoneConfiguration conf,
}

// Fallback to RPC hostname
if (getHostOnly(address).equals(OZONE_OM_HTTP_BIND_HOST_DEFAULT)) {
Optional<String> omBindHost = HddsUtils.getHostName(address);
if (omBindHost.isPresent()
&& omBindHost.get().equals(OZONE_OM_HTTP_BIND_HOST_DEFAULT)) {
Optional<String> omHost = HddsUtils.getHostNameFromConfigKeys(conf,
OMConfigKeys.OZONE_OM_ADDRESS_KEY);
if (omHost.isPresent()) {
return omHost.get() + ":" + getPort(address);
OptionalInt omPort = HddsUtils.getHostPort(address);
if (omHost.isPresent() && omPort.isPresent()) {
return HddsUtils.getHostPortString(omHost.get(), omPort.getAsInt());
}
}
return address;
Expand All @@ -140,22 +147,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 address.split(":", 2)[0];
}

/**
* Extract port from address string.
* e.g. Input: "0.0.0.0:9876" -> Output: "9876"
*/
private String getPort(String address) {
return address.split(":", 2)[1];
}

public Map<String, InsightPoint> createInsightPoints(
OzoneConfiguration configuration) {
Map<String, InsightPoint> insights = new LinkedHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 <Recon RPC host name>:<Recon http(s) address port>
final String rpcHost =
conf.get(OZONE_RECON_ADDRESS_KEY, OZONE_RECON_ADDRESS_DEFAULT);
host = getHostOnly(rpcHost) + ":" + getPort(host);
Optional<String> 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;
}
Expand Down