You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ad...@apache.org on 2022/05/14 13:48:03 UTC
[ozone] branch master updated: HDDS-5919. In kubernetes OM HA has circular dependency on service availability (#3185)
This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new f131de5f99 HDDS-5919. In kubernetes OM HA has circular dependency on service availability (#3185)
f131de5f99 is described below
commit f131de5f994f7431e7775dde9273915ea9858a7a
Author: sokui <xi...@gmail.com>
AuthorDate: Sat May 14 06:47:59 2022 -0700
HDDS-5919. In kubernetes OM HA has circular dependency on service availability (#3185)
---
.../org/apache/hadoop/ozone/OzoneConfigKeys.java | 10 ++
.../java/org/apache/hadoop/ozone/ha/ConfUtils.java | 11 --
.../apache/hadoop/ozone/util/OzoneNetUtils.java | 117 +++++++++++++++++++++
.../common/src/main/resources/ozone-default.xml | 21 ++++
.../apache/hadoop/ozone/ha/TestOzoneNetUtils.java | 41 ++++++++
.../apache/hadoop/ozone/HddsDatanodeService.java | 3 +
.../apache/hadoop/hdds/scm/ha/HASecurityUtils.java | 2 +-
.../hadoop/hdds/scm/ha/SCMHANodeDetails.java | 12 ++-
.../scm/server/StorageContainerManagerStarter.java | 3 +
.../org/apache/hadoop/ozone/om/OzoneManager.java | 44 ++++++--
.../hadoop/ozone/om/OzoneManagerStarter.java | 3 +
.../apache/hadoop/ozone/om/ha/OMHANodeDetails.java | 12 ++-
.../org/apache/hadoop/ozone/recon/ReconServer.java | 3 +
.../java/org/apache/hadoop/ozone/s3/Gateway.java | 3 +
14 files changed, 261 insertions(+), 24 deletions(-)
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
index ded7bb07d6..c9cecccc5f 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
@@ -448,6 +448,16 @@ public final class OzoneConfigKeys {
public static final boolean OZONE_CLIENT_KEY_LATEST_VERSION_LOCATION_DEFAULT =
true;
+ public static final String OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED =
+ "ozone.network.flexible.fqdn.resolution.enabled";
+ public static final boolean OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT =
+ false;
+
+ public static final String OZONE_JVM_NETWORK_ADDRESS_CACHE_ENABLED =
+ "ozone.network.jvm.address.cache.enabled";
+ public static final boolean OZONE_JVM_NETWORK_ADDRESS_CACHE_ENABLED_DEFAULT =
+ true;
+
public static final String OZONE_CLIENT_REQUIRED_OM_VERSION_MIN_KEY =
"ozone.client.required.om.version.min";
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ha/ConfUtils.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ha/ConfUtils.java
index 799a54b112..19c0921bb0 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ha/ConfUtils.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ha/ConfUtils.java
@@ -20,11 +20,8 @@ import com.google.common.base.Joiner;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.net.NetUtils;
import org.slf4j.Logger;
-import java.net.InetSocketAddress;
-
/**
* Utilities related to configuration.
*/
@@ -64,14 +61,6 @@ public final class ConfUtils {
return Joiner.on(".").skipNulls().join(suffixes);
}
- /**
- * Match input address to local address.
- * Return true if it matches, false otherwsie.
- */
- public static boolean isAddressLocal(InetSocketAddress addr) {
- return NetUtils.isLocalAddress(addr.getAddress());
- }
-
/**
* Get the conf key value appended with serviceId and nodeId.
* @param conf
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/OzoneNetUtils.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/OzoneNetUtils.java
new file mode 100644
index 0000000000..855153f39e
--- /dev/null
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/OzoneNetUtils.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.hadoop.ozone.util;
+
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.net.NetUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.security.Security;
+
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_JVM_NETWORK_ADDRESS_CACHE_ENABLED;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_JVM_NETWORK_ADDRESS_CACHE_ENABLED_DEFAULT;
+
+/**
+ * Ozone Network related utils. Provides methods related to local host name and
+ * jvm network address cache. This utils is mainly used in kubernetes where
+ * the FQDN [pod_name].[service_name] is not resolvable at the service
+ * starting time.
+ */
+public final class OzoneNetUtils {
+ private static final Logger LOG =
+ LoggerFactory.getLogger(OzoneNetUtils.class);
+
+ private OzoneNetUtils() {
+ }
+
+ public static void disableJvmNetworkAddressCacheIfRequired(
+ final OzoneConfiguration conf) {
+ final boolean networkAddressCacheEnabled = conf.getBoolean(
+ OZONE_JVM_NETWORK_ADDRESS_CACHE_ENABLED,
+ OZONE_JVM_NETWORK_ADDRESS_CACHE_ENABLED_DEFAULT);
+
+ if (!networkAddressCacheEnabled) {
+ LOG.info("Disabling JVM DNS cache");
+ Security.setProperty("networkaddress.cache.ttl", "0");
+ Security.setProperty("networkaddress.cache.negative.ttl", "0");
+ }
+ }
+
+ /**
+ * Check if the input FQDN's host name matches local host name.
+ *
+ * @param addr a FQDN address
+ * @return true if the host name matches the local host name;
+ * otherwise, return false
+ */
+ public static boolean isAddressHostNameLocal(final InetSocketAddress addr) {
+ if (addr == null) {
+ return false;
+ }
+ final String hostNameWithoutDomain =
+ getHostNameWithoutDomain(addr.getHostName());
+ return NetUtils.getLocalHostname().equals(hostNameWithoutDomain);
+ }
+
+ /**
+ * For the input FQDN address, return a new address with its host name
+ * (without the domain name) and port.
+ *
+ * @param addr a FQDN address
+ * @return The address of host name
+ */
+ public static InetSocketAddress getAddressWithHostNameLocal(
+ final InetSocketAddress addr) {
+ final String fqdn = addr.getHostName();
+ final String hostName = getHostNameWithoutDomain(fqdn);
+ return NetUtils.createSocketAddr(hostName, addr.getPort());
+ }
+
+ private static String getHostNameWithoutDomain(final String fqdn) {
+ return fqdn.split("\\.")[0];
+ }
+
+
+ /**
+ * Match input address to local address.
+ * Return true if it matches, false otherwsie.
+ */
+ public static boolean isAddressLocal(InetSocketAddress addr) {
+ InetAddress inetAddress = addr.getAddress();
+ return inetAddress != null && NetUtils.isLocalAddress(inetAddress);
+ }
+
+
+ public static boolean isUnresolved(boolean flexibleFqdnResolutionEnabled,
+ InetSocketAddress addr) {
+ return !flexibleFqdnResolutionEnabled && addr.isUnresolved()
+ || flexibleFqdnResolutionEnabled
+ && !isAddressHostNameLocal(addr);
+ }
+
+ public static boolean isAddressLocal(boolean flexibleFqdnResolutionEnabled,
+ InetSocketAddress addr) {
+ return !flexibleFqdnResolutionEnabled
+ && !addr.isUnresolved()
+ && OzoneNetUtils.isAddressLocal(addr)
+ || flexibleFqdnResolutionEnabled
+ && isAddressHostNameLocal(addr);
+ }
+}
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 4db1fe4479..a10b4315d8 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -2904,6 +2904,27 @@
</description>
</property>
+ <property>
+ <name>ozone.network.flexible.fqdn.resolution.enabled</name>
+ <tag>OZONE, SCM, OM</tag>
+ <value>false</value>
+ <description>SCM, OM hosts will be able to resolve itself based on its host
+ name instead of fqdn. It is useful for deploying to kubernetes
+ environment, during the initial launching time when
+ [pod_name].[service_name] is not resolvable yet because of the probe.
+ </description>
+ </property>
+
+ <property>
+ <name>ozone.network.jvm.address.cache.enabled</name>
+ <tag>OZONE, SCM, OM, DATANODE</tag>
+ <value>true</value>
+ <description>Disable the jvm network address cache. In environment such as
+ kubernetes, IPs of instances of scm, om and datanodes can be changed.
+ Disabling this cache helps to quickly resolve the fqdn's to the new IPs.
+ </description>
+ </property>
+
<property>
<name>ozone.directory.deleting.service.interval</name>
<value>1m</value>
diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/ha/TestOzoneNetUtils.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/ha/TestOzoneNetUtils.java
new file mode 100644
index 0000000000..2d14abd3f5
--- /dev/null
+++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/ha/TestOzoneNetUtils.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.hadoop.ozone.ha;
+
+import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.net.InetSocketAddress;
+
+/**
+ * Tests for {@link OzoneNetUtils} class.
+ */
+public class TestOzoneNetUtils {
+ @Test
+ public void testGetAddressWithHostName() {
+ String fqdn = "pod0.service.com";
+ int port = 1234;
+
+ InetSocketAddress addr0 = NetUtils.createSocketAddr(fqdn, port);
+ InetSocketAddress addr1 = OzoneNetUtils.getAddressWithHostNameLocal(
+ addr0);
+ Assert.assertEquals("pod0", addr1.getHostName());
+ Assert.assertEquals(port, addr1.getPort());
+ }
+}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
index a6036dffe5..de5360616b 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
@@ -61,6 +61,7 @@ import org.apache.hadoop.ozone.container.common.utils.HddsVolumeUtil;
import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet;
import org.apache.hadoop.ozone.container.common.volume.StorageVolume;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.util.ShutdownHookManager;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.UserGroupInformation;
@@ -151,6 +152,8 @@ public class HddsDatanodeService extends GenericCli implements ServicePlugin {
public static void main(String[] args) {
try {
+ OzoneNetUtils.disableJvmNetworkAddressCacheIfRequired(
+ new OzoneConfiguration());
Introspector.checkCompliance(DNMXBeanImpl.class);
HddsDatanodeService hddsDatanodeService =
createHddsDatanodeService(args, true);
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/HASecurityUtils.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/HASecurityUtils.java
index 2ae3a08fff..8a317bb128 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/HASecurityUtils.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/HASecurityUtils.java
@@ -262,7 +262,7 @@ public final class HASecurityUtils {
client.getPrivateKey());
// Get host name.
- String hostname = scmAddress.getAddress().getHostName();
+ String hostname = scmAddress.getHostName();
String subject = SCM_SUB_CA_PREFIX + hostname;
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHANodeDetails.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHANodeDetails.java
index 7c46a02fdb..a2a83a2e58 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHANodeDetails.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHANodeDetails.java
@@ -24,6 +24,7 @@ import org.apache.hadoop.hdds.scm.ScmUtils;
import org.apache.hadoop.hdds.utils.HddsServerUtil;
import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.ozone.ha.ConfUtils;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,6 +60,8 @@ import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SECURITY_SERVIC
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SECURITY_SERVICE_BIND_HOST_KEY;
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SECURITY_SERVICE_PORT_KEY;
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SERVICE_IDS_KEY;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT;
/**
* SCM HA node details.
@@ -227,13 +230,18 @@ public class SCMHANodeDetails {
throw e;
}
- if (addr.isUnresolved()) {
+ boolean flexibleFqdnResolutionEnabled = conf.getBoolean(
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED,
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT);
+ if (OzoneNetUtils.isUnresolved(flexibleFqdnResolutionEnabled, addr)) {
LOG.error("Address for SCM {} : {} couldn't be resolved. Proceeding "
+ "with unresolved host to create Ratis ring.", nodeId,
rpcAddrStr);
}
- if (!addr.isUnresolved() && !isPeer && ConfUtils.isAddressLocal(addr)) {
+ if (!isPeer
+ && OzoneNetUtils
+ .isAddressLocal(flexibleFqdnResolutionEnabled, addr)) {
localRpcAddress = addr;
localScmServiceId = serviceId;
localScmNodeId = nodeId;
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
index 030601a5fd..bf8c1f70e1 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.tracing.TracingUtil;
import org.apache.hadoop.hdds.utils.HddsVersionInfo;
import org.apache.hadoop.ozone.common.StorageInfo;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.util.ShutdownHookManager;
import org.apache.hadoop.security.authentication.client.AuthenticationException;
import org.slf4j.Logger;
@@ -56,6 +57,8 @@ public class StorageContainerManagerStarter extends GenericCli {
LoggerFactory.getLogger(StorageContainerManagerStarter.class);
public static void main(String[] args) {
+ OzoneNetUtils.disableJvmNetworkAddressCacheIfRequired(
+ new OzoneConfiguration());
new StorageContainerManagerStarter(
new StorageContainerManagerStarter.SCMStarterHelper()).run(args);
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index 2cde62ba95..5d2517b677 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -70,6 +70,7 @@ import org.apache.hadoop.hdds.protocolPB.SCMSecurityProtocolClientSideTranslator
import org.apache.hadoop.hdds.scm.ScmInfo;
import org.apache.hadoop.hdds.scm.client.HddsClientUtils;
import org.apache.hadoop.ozone.OzoneManagerVersion;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.hdds.scm.ha.SCMNodeInfo;
import org.apache.hadoop.hdds.scm.protocol.ScmBlockLocationProtocol;
@@ -211,6 +212,8 @@ import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ACL_ENABLED;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ACL_ENABLED_DEFAULT;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ADMINISTRATORS;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ADMINISTRATORS_WILDCARD;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_KEY_PREALLOCATION_BLOCKS_MAX;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_KEY_PREALLOCATION_BLOCKS_MAX_DEFAULT;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE;
@@ -1026,6 +1029,13 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
LOG.info("Creating RPC Server");
InetSocketAddress omNodeRpcAddr = OmUtils.getOmAddress(conf);
+ boolean flexibleFqdnResolutionEnabled = conf.getBoolean(
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED,
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT);
+ if (flexibleFqdnResolutionEnabled && omNodeRpcAddr.getAddress() == null) {
+ omNodeRpcAddr =
+ OzoneNetUtils.getAddressWithHostNameLocal(omNodeRpcAddr);
+ }
final int handlerCount = conf.getInt(OZONE_OM_HANDLER_COUNT_KEY,
OZONE_OM_HANDLER_COUNT_DEFAULT);
@@ -2034,17 +2044,35 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
CertificateSignRequest.Builder builder = client.getCSRBuilder();
KeyPair keyPair = new KeyPair(client.getPublicKey(),
client.getPrivateKey());
- InetSocketAddress omRpcAdd;
- omRpcAdd = OmUtils.getOmAddress(config);
- if (omRpcAdd == null || omRpcAdd.getAddress() == null) {
+ boolean flexibleFqdnResolutionEnabled = config.getBoolean(
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED,
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT);
+ InetSocketAddress omRpcAdd = OmUtils.getOmAddress(config);
+ String ip = null;
+
+ boolean addressResolved = omRpcAdd != null && omRpcAdd.getAddress() != null;
+ if (flexibleFqdnResolutionEnabled && !addressResolved && omRpcAdd != null) {
+ InetSocketAddress omRpcAddWithHostName =
+ OzoneNetUtils.getAddressWithHostNameLocal(omRpcAdd);
+ if (omRpcAddWithHostName != null
+ && omRpcAddWithHostName.getAddress() != null) {
+ addressResolved = true;
+ ip = omRpcAddWithHostName.getAddress().getHostAddress();
+ }
+ }
+
+ if (!addressResolved) {
LOG.error("Incorrect om rpc address. omRpcAdd:{}", omRpcAdd);
throw new RuntimeException("Can't get SCM signed certificate. " +
"omRpcAdd: " + omRpcAdd);
}
- // Get host name.
- String hostname = omRpcAdd.getAddress().getHostName();
- String ip = omRpcAdd.getAddress().getHostAddress();
+ if (ip == null) {
+ ip = omRpcAdd.getAddress().getHostAddress();
+ }
+
+ String hostname = omRpcAdd.getHostName();
+ int port = omRpcAdd.getPort();
String subject;
if (builder.hasDnsName()) {
subject = UserGroupInformation.getCurrentUser().getShortUserName()
@@ -2074,12 +2102,12 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
HddsProtos.OzoneManagerDetailsProto.Builder omDetailsProtoBuilder =
HddsProtos.OzoneManagerDetailsProto.newBuilder()
- .setHostName(omRpcAdd.getHostName())
+ .setHostName(hostname)
.setIpAddress(ip)
.setUuid(omStore.getOmId())
.addPorts(HddsProtos.Port.newBuilder()
.setName(RPC_PORT)
- .setValue(omRpcAdd.getPort())
+ .setValue(port)
.build());
PKCS10CertificationRequest csr = builder.build();
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
index 8a22bff127..af321199bd 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.hdds.cli.GenericCli;
import org.apache.hadoop.hdds.cli.HddsVersionProvider;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.tracing.TracingUtil;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.util.OzoneVersionInfo;
import org.apache.hadoop.ozone.util.ShutdownHookManager;
import org.apache.hadoop.security.authentication.client.AuthenticationException;
@@ -51,6 +52,8 @@ public class OzoneManagerStarter extends GenericCli {
LoggerFactory.getLogger(OzoneManagerStarter.class);
public static void main(String[] args) throws Exception {
+ OzoneNetUtils.disableJvmNetworkAddressCacheIfRequired(
+ new OzoneConfiguration());
new OzoneManagerStarter(
new OzoneManagerStarter.OMStarterHelper()).run(args);
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ha/OMHANodeDetails.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ha/OMHANodeDetails.java
index d04266a0d4..3927ec0ecc 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ha/OMHANodeDetails.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ha/OMHANodeDetails.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.ozone.OzoneIllegalArgumentException;
import org.apache.hadoop.ozone.ha.ConfUtils;
import org.apache.hadoop.ozone.om.OMConfigKeys;
import org.apache.hadoop.ozone.om.helpers.OMNodeDetails;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,6 +38,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED;
+import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ADDRESS_KEY;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_INTERNAL_SERVICE_ID;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_NODES_KEY;
@@ -169,13 +172,18 @@ public class OMHANodeDetails {
throw e;
}
- if (addr.isUnresolved()) {
+ boolean flexibleFqdnResolutionEnabled = conf.getBoolean(
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED,
+ OZONE_FLEXIBLE_FQDN_RESOLUTION_ENABLED_DEFAULT);
+ if (OzoneNetUtils.isUnresolved(flexibleFqdnResolutionEnabled, addr)) {
LOG.error("Address for OM {} : {} couldn't be resolved. Proceeding " +
"with unresolved host to create Ratis ring.", nodeId,
rpcAddrStr);
}
- if (!addr.isUnresolved() && !isPeer && ConfUtils.isAddressLocal(addr)) {
+ if (!isPeer
+ && OzoneNetUtils
+ .isAddressLocal(flexibleFqdnResolutionEnabled, addr)) {
localRpcAddress = addr;
localOMServiceId = serviceId;
localOMNodeId = nodeId;
diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
index 8b0e9f1eb2..5fb1d2b02b 100644
--- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
+++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
@@ -42,6 +42,7 @@ import org.apache.hadoop.ozone.recon.spi.ReconContainerMetadataManager;
import org.apache.hadoop.ozone.recon.spi.ReconNamespaceSummaryManager;
import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
import org.apache.hadoop.ozone.recon.spi.impl.ReconDBProvider;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.util.OzoneVersionInfo;
import org.apache.hadoop.ozone.util.ShutdownHookManager;
import org.apache.hadoop.security.SecurityUtil;
@@ -86,6 +87,8 @@ public class ReconServer extends GenericCli {
private volatile boolean isStarted = false;
public static void main(String[] args) {
+ OzoneNetUtils.disableJvmNetworkAddressCacheIfRequired(
+ new OzoneConfiguration());
new ReconServer().run(args);
}
diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java
index 3792f59fd0..d453418b73 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hdds.tracing.TracingUtil;
import org.apache.hadoop.hdds.utils.HddsServerUtil;
import org.apache.hadoop.ozone.OzoneSecurityUtil;
import org.apache.hadoop.ozone.s3.metrics.S3GatewayMetrics;
+import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.util.OzoneVersionInfo;
import org.apache.hadoop.ozone.util.ShutdownHookManager;
@@ -57,6 +58,8 @@ public class Gateway extends GenericCli {
private OzoneConfiguration ozoneConfiguration;
public static void main(String[] args) throws Exception {
+ OzoneNetUtils.disableJvmNetworkAddressCacheIfRequired(
+ new OzoneConfiguration());
new Gateway().run(args);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org