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 72bb9b7  HDDS-3515. Ensure consistent OM token service field in HA 
environment. (#889)
72bb9b7 is described below

commit 72bb9b7b5a9110163cb499dda6794e9e5a791f70
Author: Xiaoyu Yao <[email protected]>
AuthorDate: Thu Apr 30 14:41:28 2020 -0700

    HDDS-3515. Ensure consistent OM token service field in HA environment. 
(#889)
---
 .../ozone/om/ha/OMFailoverProxyProvider.java       |  9 ++---
 .../ozone/om/ha/TestOMFailoverProxyProvider.java   | 39 ++++++++++++++++++++--
 2 files changed, 42 insertions(+), 6 deletions(-)

diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProvider.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProvider.java
index ec69175..e4f44d2 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProvider.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/ha/OMFailoverProxyProvider.java
@@ -213,7 +213,7 @@ public class OMFailoverProxyProvider implements
 
   private Text computeDelegationTokenService() {
     // For HA, this will return "," separated address of all OM's.
-    StringBuilder rpcAddress = new StringBuilder();
+    List<String> addresses = new ArrayList<>();
 
     for (Map.Entry<String, OMProxyInfo> omProxyInfoSet :
         omProxyInfos.entrySet()) {
@@ -222,12 +222,13 @@ public class OMFailoverProxyProvider implements
       // During client object creation when one of the OM configured address
       // in unreachable, dtService can be null.
       if (dtService != null) {
-        rpcAddress.append(",").append(dtService);
+        addresses.add(dtService.toString());
       }
     }
 
-    if (!rpcAddress.toString().isEmpty()) {
-      return new Text(rpcAddress.toString().substring(1));
+    if (!addresses.isEmpty()) {
+      Collections.sort(addresses);
+      return new Text(String.join(",", addresses));
     } else {
       // If all OM addresses are unresolvable, set dt service to null. Let
       // this fail in later step when during connection setup.
diff --git 
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java
 
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java
index 20e51d3..e6c6af0 100644
--- 
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java
+++ 
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestOMFailoverProxyProvider.java
@@ -17,13 +17,18 @@
  */
 package org.apache.hadoop.ozone.om.ha;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.StringJoiner;
+
+import org.apache.hadoop.io.Text;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Before;
 
-import java.util.StringJoiner;
-
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.ozone.OmUtils;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -157,4 +162,34 @@ public class TestOMFailoverProxyProvider {
           provider.getWaitTime());
     }
   }
+
+  /**
+   * Tests canonical delegation token service name in is consistently ordered.
+   */
+  @Test
+  public void testCanonicalTokenServiceName() throws IOException {
+    OzoneConfiguration ozoneConf = new OzoneConfiguration();
+    ArrayList<String> nodeAddrs = new ArrayList<>(
+        Arrays.asList("4.3.2.1:9862", "2.1.0.5:9862", "3.2.1.0:9862"));
+    Assert.assertEquals(numNodes, nodeAddrs.size());
+
+    StringJoiner allNodeIds = new StringJoiner(",");
+    for (int i = 1; i <= numNodes; i++) {
+      String nodeId = NODE_ID_BASE_STR + i;
+      ozoneConf.set(OmUtils.addKeySuffixes(OZONE_OM_ADDRESS_KEY, OM_SERVICE_ID,
+          nodeId), nodeAddrs.get(i-1));
+      allNodeIds.add(nodeId);
+    }
+    ozoneConf.set(OmUtils.addKeySuffixes(OZONE_OM_NODES_KEY, OM_SERVICE_ID),
+        allNodeIds.toString());
+    OMFailoverProxyProvider prov = new OMFailoverProxyProvider(ozoneConf,
+        UserGroupInformation.getCurrentUser(), OM_SERVICE_ID);
+
+    Text dtService = prov.getCurrentProxyDelegationToken();
+
+    Collections.sort(nodeAddrs);
+    String expectedDtService = String.join(",", nodeAddrs);
+    Assert.assertEquals(expectedDtService, dtService.toString());
+  }
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to