You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by bh...@apache.org on 2020/03/28 18:29:41 UTC

[hadoop-ozone] branch master updated: HDDS-3273. getConf does not return all OM addresses. (#727)

This is an automated email from the ASF dual-hosted git repository.

bharat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 099ab62  HDDS-3273. getConf does not return all OM addresses. (#727)
099ab62 is described below

commit 099ab62176107204a156b01472c6af69d255c38e
Author: Siddharth <sw...@apache.org>
AuthorDate: Sat Mar 28 11:29:34 2020 -0700

    HDDS-3273. getConf does not return all OM addresses. (#727)
---
 .../main/java/org/apache/hadoop/ozone/OmUtils.java | 32 ++++++++++++++++++++++
 .../apache/hadoop/ozone/freon/OzoneGetConf.java    |  6 +++-
 .../java/org/apache/hadoop/ozone/TestOmUtils.java  | 25 +++++++++++++++++
 3 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
index 87522e3..3552e79 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
@@ -29,8 +29,12 @@ import java.nio.file.Path;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.stream.Collectors;
@@ -90,6 +94,34 @@ public final class OmUtils {
   }
 
   /**
+   * Return list of OM addresses by service ids - when HA is enabled.
+   *
+   * @param conf {@link Configuration}
+   * @return {service.id -> [{@link InetSocketAddress}]}
+   */
+  public static Map<String, List<InetSocketAddress>> getOmHAAddressesById(
+      Configuration conf) {
+    Map<String, List<InetSocketAddress>> result = new HashMap<>();
+    for (String serviceId : conf.getTrimmedStringCollection(
+        OZONE_OM_SERVICE_IDS_KEY)) {
+      if (!result.containsKey(serviceId)) {
+        result.put(serviceId, new ArrayList<>());
+      }
+      for (String nodeId : getOMNodeIds(conf, serviceId)) {
+        String rpcAddr = getOmRpcAddress(conf,
+            addKeySuffixes(OZONE_OM_ADDRESS_KEY, serviceId, nodeId));
+        if (rpcAddr != null) {
+          result.get(serviceId).add(NetUtils.createSocketAddr(rpcAddr));
+        } else {
+          LOG.warn("Address undefined for nodeId: {} for service {}", nodeId,
+              serviceId);
+        }
+      }
+    }
+    return result;
+  }
+
+  /**
    * Retrieve the socket address that is used by OM.
    * @param conf
    * @return Target InetSocketAddress for the SCM service endpoint.
diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/freon/OzoneGetConf.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/freon/OzoneGetConf.java
index 3c60e59..83283d4 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/freon/OzoneGetConf.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/freon/OzoneGetConf.java
@@ -253,7 +253,11 @@ public class OzoneGetConf extends Configured implements Tool {
     @Override
     public int doWorkInternal(OzoneGetConf tool, String[] args)
         throws IOException {
-      tool.printOut(OmUtils.getOmAddress(tool.getConf()).getHostName());
+      if (OmUtils.isServiceIdsDefined(tool.getConf())) {
+        tool.printOut(OmUtils.getOmHAAddressesById(tool.getConf()).toString());
+      } else {
+        tool.printOut(OmUtils.getOmAddress(tool.getConf()).getHostName());
+      }
       return 0;
     }
   }
diff --git a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
index 7f37410..cdbb786 100644
--- a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
+++ b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.ozone;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.utils.db.DBCheckpoint;
 import org.apache.hadoop.io.IOUtils;
 import org.junit.Rule;
@@ -31,9 +32,13 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.net.InetSocketAddress;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.List;
+import java.util.Map;
 
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_SERVICE_IDS_KEY;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -113,6 +118,26 @@ public class TestOmUtils {
     // expecting exception
   }
 
+  @Test
+  public void testGetOmHAAddressesById() {
+    OzoneConfiguration conf = new OzoneConfiguration();
+    conf.set(OZONE_OM_SERVICE_IDS_KEY, "ozone1");
+    conf.set("ozone.om.nodes.ozone1", "node1,node2,node3");
+    conf.set("ozone.om.address.ozone1.node1", "1.1.1.1");
+    conf.set("ozone.om.address.ozone1.node2", "1.1.1.2");
+    conf.set("ozone.om.address.ozone1.node3", "1.1.1.3");
+    Map<String, List<InetSocketAddress>> addresses =
+        OmUtils.getOmHAAddressesById(conf);
+    assertFalse(addresses.isEmpty());
+    List<InetSocketAddress> rpcAddrs = addresses.get("ozone1");
+    assertFalse(rpcAddrs.isEmpty());
+    assertTrue(rpcAddrs.stream().anyMatch(
+        a -> a.getAddress().getHostAddress().equals("1.1.1.1")));
+    assertTrue(rpcAddrs.stream().anyMatch(
+        a -> a.getAddress().getHostAddress().equals("1.1.1.2")));
+    assertTrue(rpcAddrs.stream().anyMatch(
+        a -> a.getAddress().getHostAddress().equals("1.1.1.3")));
+  }
 }
 
 class TestDBCheckpoint implements DBCheckpoint {


---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: ozone-commits-help@hadoop.apache.org