From 410e0fd00e780f4fb355f0153e79b46d5e91eaaa Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" Date: Sat, 14 May 2022 00:16:01 +0200 Subject: [PATCH] HDDS-6749. SCM includes itself as peer in addSCM request --- .../apache/hadoop/hdds/scm/ha/SCMHAUtils.java | 8 +-- .../hadoop/hdds/scm/TestSCMHAUtils.java | 54 +++++++++++++++++++ ...SCMBlockLocationFailoverProxyProvider.java | 3 ++ 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/TestSCMHAUtils.java diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAUtils.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAUtils.java index 55147081c812..9baa61d4344c 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAUtils.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAUtils.java @@ -196,9 +196,9 @@ public static String getScmServiceId(ConfigurationSource conf) { public static OzoneConfiguration removeSelfId( OzoneConfiguration configuration, String selfId) { final OzoneConfiguration conf = new OzoneConfiguration(configuration); - String scmNodes = conf.get(ConfUtils - .addKeySuffixes(ScmConfigKeys.OZONE_SCM_NODES_KEY, - getScmServiceId(conf))); + String scmNodesKey = ConfUtils.addKeySuffixes( + ScmConfigKeys.OZONE_SCM_NODES_KEY, getScmServiceId(conf)); + String scmNodes = conf.get(scmNodesKey); if (scmNodes != null) { String[] parts = scmNodes.split(","); List partsLeft = new ArrayList<>(); @@ -207,7 +207,7 @@ public static OzoneConfiguration removeSelfId( partsLeft.add(part); } } - conf.set(ScmConfigKeys.OZONE_SCM_NODES_KEY, String.join(",", partsLeft)); + conf.set(scmNodesKey, String.join(",", partsLeft)); } return conf; } diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/TestSCMHAUtils.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/TestSCMHAUtils.java new file mode 100644 index 000000000000..e913a639eeda --- /dev/null +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/TestSCMHAUtils.java @@ -0,0 +1,54 @@ +/* + * 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.hdds.scm; + +import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.apache.hadoop.hdds.scm.ha.SCMHAUtils; +import org.junit.jupiter.api.Test; + +import java.util.Collection; + +import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_NODES_KEY; +import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_NODE_ID_KEY; +import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SERVICE_IDS_KEY; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +/** + * Tests for {@code SCMHAUtils}. + */ +class TestSCMHAUtils { + + @Test + void testRemoveSelfId() { + String service = "mySCM"; + String selfId = "scm3"; + + OzoneConfiguration input = new OzoneConfiguration(); + input.set(OZONE_SCM_SERVICE_IDS_KEY, service); + input.set(OZONE_SCM_NODES_KEY + "." + service, "scm1,scm2," + selfId); + input.set(OZONE_SCM_NODE_ID_KEY, selfId); + + OzoneConfiguration output = SCMHAUtils.removeSelfId(input, selfId); + Collection nodesWithoutSelf = + SCMHAUtils.getSCMNodeIds(output, service); + + assertEquals(2, nodesWithoutSelf.size()); + assertFalse(nodesWithoutSelf.contains(selfId)); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMBlockLocationFailoverProxyProvider.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMBlockLocationFailoverProxyProvider.java index 0ee19d5f0132..5cff8888306f 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMBlockLocationFailoverProxyProvider.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMBlockLocationFailoverProxyProvider.java @@ -110,6 +110,9 @@ public SCMBlockLocationFailoverProxyProvider(ConfigurationSource conf) { SCMClientConfig config = conf.getObject(SCMClientConfig.class); this.maxRetryCount = config.getRetryCount(); this.retryInterval = config.getRetryInterval(); + + LOG.info("Created block location fail-over proxy with {} nodes: {}", + scmNodeIds.size(), scmProxyInfoMap.values()); } private synchronized void loadConfigs() {