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]