This is an automated email from the ASF dual-hosted git repository.
sammichen 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 72b5de7548 HDDS-8518. Admin SCM decommission command primordial node
support (#4649)
72b5de7548 is described below
commit 72b5de754802a816a30bb026cd6a4f4bf957b340
Author: Neil Joshi <[email protected]>
AuthorDate: Mon May 8 03:06:07 2023 -0600
HDDS-8518. Admin SCM decommission command primordial node support (#4649)
---
.../hadoop/hdds/scm/ha/SCMHAManagerImpl.java | 2 -
.../hadoop/hdds/scm/ha/SCMRatisServerImpl.java | 3 +-
.../hdds/scm/server/StorageContainerManager.java | 5 --
.../hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java | 2 -
.../dist/src/main/compose/ozonesecure-ha/test.sh | 7 +++
.../main/smoketest/scmha/scm-decommission.robot | 60 ++++++++++++++++++++++
.../ozone/scm/TestDecommissionScmSubcommand.java | 4 +-
7 files changed, 71 insertions(+), 12 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
index 64a02b50ee..6af0fb9919 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
@@ -371,8 +371,6 @@ public class SCMHAManagerImpl implements SCMHAManager {
*/
@Override
public boolean removeSCM(RemoveSCMRequest request) throws IOException {
- // Currently we don't support decommission of Primordial SCM
- // The caller should make sure that the requested node is not Primordial
SCM
String clusterId = scm.getClusterId();
if (!request.getClusterId().equals(scm.getClusterId())) {
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
index bf88f2a3fc..230f3067c3 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMRatisServerImpl.java
@@ -266,7 +266,8 @@ public class SCMRatisServerImpl implements SCMRatisServer {
":".concat(RaftProtos.RaftPeerRole.LEADER.toString()) :
":".concat(RaftProtos.RaftPeerRole.FOLLOWER.toString()))
.concat(":".concat(peer.getId().toString()))
- .concat(":".concat(peerInetAddress.getHostAddress()))));
+ .concat(":".concat(peerInetAddress == null ? "" :
+ peerInetAddress.getHostAddress()))));
}
return ratisRoles;
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index 3f9f49ac0b..7d0fd4bd78 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -2166,11 +2166,6 @@ public final class StorageContainerManager extends
ServiceRuntimeInfoImpl
throw new IOException("Cannot remove current leader.");
}
- // Currently we don't support removal of primordial node.
- if (scmId.equals(primaryScmNodeId)) {
- throw new IOException("Removal of primordial node is not supported.");
- }
-
Preconditions.checkNotNull(getScmHAManager().getRatisServer()
.getDivision().getGroup());
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
index 10d15c9170..11209217cc 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
@@ -168,8 +168,6 @@ class TestSCMHAManagerImpl {
scm2.removePeerFromHARing(randomScmId));
assertTrue(ex.getMessage().contains("Peer"));
- // TODO: try removing primordial node from ratis ring
-
// try removing leader scm from ratis ring
ex = assertThrows(IOException.class, () ->
scm2.removePeerFromHARing(scm2.getScmId()));
diff --git a/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test.sh
b/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test.sh
index 0b39ffb9c1..10d71c08cf 100755
--- a/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test.sh
+++ b/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test.sh
@@ -70,6 +70,13 @@ docker-compose up -d datanode4
wait_for_port datanode4 9856 60
wait_for_execute_command scm4.org 60 "ozone admin datanode list | grep
datanode4"
+# decommission primordial node scm1.org
+SCMID=$(execute_command_in_container scm4.org bash -c "ozone admin scm roles"
| grep scm4 | awk -F: '{print $4}')
+docker-compose stop scm4.org
+execute_robot_test scm3.org kinit.robot
+wait_for_execute_command scm3.org 60 "ozone admin scm decommission
--nodeid=${SCMID} | grep Decommissioned"
+execute_robot_test scm3.org scmha/scm-decommission.robot
+
stop_docker_env
generate_report
diff --git a/hadoop-ozone/dist/src/main/smoketest/scmha/scm-decommission.robot
b/hadoop-ozone/dist/src/main/smoketest/scmha/scm-decommission.robot
new file mode 100644
index 0000000000..49ce16b233
--- /dev/null
+++ b/hadoop-ozone/dist/src/main/smoketest/scmha/scm-decommission.robot
@@ -0,0 +1,60 @@
+# 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.
+
+*** Settings ***
+Documentation Smoketest ozone cluster startup
+Library OperatingSystem
+Library BuiltIn
+Resource ../commonlib.robot
+Test Timeout 5 minutes
+
+*** Variables ***
+
+** Keywords ***
+
+*** Test Cases ***
+Transfer Leader to non-primordial node Follower
+ ${result} = Execute ozone admin scm roles
--service-id=scmservice
+ LOG ${result}
+ ${follower_nodes} = Get Lines Matching Pattern
${result} scm[23].org:9894:FOLLOWER*
+ ${follower_node} = Get Line ${follower_nodes} 0
+ ${follower_split} = Split String ${follower_node} :
+ ${follower_scmId} = Strip String ${follower_split[3]}
+
+ ${result} = Execute ozone admin scm transfer
--service-id=scmservice -n ${follower_scmId}
+ LOG ${result}
+ Should Contain ${result}
Transfer leadership successfully
+
+Decommission SCM Primordial Node
+ ${result} = Execute ozone admin scm roles
--service-id=scmservice
+ ${nodes_in_quorum} = Get Lines Matching Pattern
${result} scm[1234].org:9894:*
+ ${node_count} = Get Line Count ${nodes_in_quorum}
+ ${node_count_pre} = Convert to String ${node_count}
+ ${n} = Evaluate ${node_count}-1
+ ${node_count_expect} = Convert to String ${n}
+ LOG SCM Instance Count before
SCM Decommission: ${node_count_pre}
+ ${primordial_node} = Get Lines Containing String
${result} scm1
+ ${primordial_split} = Split String ${primordial_node} :
+ ${primordial_scmId} = Strip String ${primordial_split[3]}
+ ${decommission_res} = Execute ozone admin scm
decommission --nodeid=${primordial_scmId}
+ LOG ${decommission_res}
+ Should Contain ${decommission_res}
Decommissioned
+ ${result} = Execute ozone admin scm roles
--service-id=scmservice
+ ${nodes_in_quorum} = Get Lines Matching Pattern
${result} scm[1234].org:9894:*
+ ${node_count} = Get Line Count ${nodes_in_quorum}
+ ${node_count_post} = Convert to String ${node_count}
+ LOG SCM Instance Count after
SCM Decommission: ${node_count_post}
+ Should be Equal ${node_count_expect}
${node_count_post}
+
diff --git
a/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/scm/TestDecommissionScmSubcommand.java
b/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/scm/TestDecommissionScmSubcommand.java
index 794a99e527..a7ba74949a 100644
---
a/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/scm/TestDecommissionScmSubcommand.java
+++
b/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/scm/TestDecommissionScmSubcommand.java
@@ -88,7 +88,7 @@ public class TestDecommissionScmSubcommand {
DecommissionScmResponseProto response =
DecommissionScmResponseProto.newBuilder()
.setSuccess(false)
- .setErrorMsg("Removal of primordial node is not supported")
+ .setErrorMsg("Cannot remove current leader.")
.build();
Mockito.when(client.decommissionScm(any()))
@@ -99,7 +99,7 @@ public class TestDecommissionScmSubcommand {
new GenericTestUtils.SystemOutCapturer()) {
cmd.execute(client);
assertTrue(capture.getOutput().contains(
- "Removal of primordial"));
+ "remove current leader"));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]