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 2d57e9f HDDS-5708. Skip sending container close command to unhealthy
replica. (#2610)
2d57e9f is described below
commit 2d57e9fff0287516c8af9e250f39197dcf998977
Author: Sammi Chen <[email protected]>
AuthorDate: Tue Sep 14 12:35:15 2021 +0800
HDDS-5708. Skip sending container close command to unhealthy replica.
(#2610)
---
.../hdds/scm/container/ReplicationManager.java | 8 ++++++--
.../hdds/scm/container/TestReplicationManager.java | 24 ++++++++++++++++++++++
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java
index 90bbd97..68a8fa7 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ReplicationManager.java
@@ -426,8 +426,12 @@ public class ReplicationManager implements SCMService {
* we have to resend close container command to the datanodes.
*/
if (state == LifeCycleState.CLOSING) {
- replicas.forEach(replica -> sendCloseCommand(
- container, replica.getDatanodeDetails(), false));
+ for (ContainerReplica replica: replicas) {
+ if (replica.getState() != State.UNHEALTHY) {
+ sendCloseCommand(
+ container, replica.getDatanodeDetails(), false);
+ }
+ }
return;
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestReplicationManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestReplicationManager.java
index 631ab2b..2d84a5a 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestReplicationManager.java
@@ -827,6 +827,30 @@ public class TestReplicationManager {
.onMessage(id, eventQueue);
}
+ /**
+ * ReplicationManager should skip send close command to unhealthy replica.
+ */
+ @Test
+ public void testCloseUnhealthyReplica()
+ throws SCMException, ContainerNotFoundException, InterruptedException {
+ final ContainerInfo container = getContainer(LifeCycleState.CLOSING);
+ final ContainerID id = container.containerID();
+ final Set<ContainerReplica> replicas = getReplicas(id, State.UNHEALTHY,
+ randomDatanodeDetails());
+ replicas.addAll(getReplicas(id, State.OPEN, randomDatanodeDetails()));
+ replicas.addAll(getReplicas(id, State.OPEN, randomDatanodeDetails()));
+
+ containerStateManager.loadContainer(container);
+ for (ContainerReplica replica : replicas) {
+ containerStateManager.updateContainerReplica(id, replica);
+ }
+
+ replicationManager.processAll();
+ // Wait for EventQueue to call the event handler
+ eventQueue.processAll(1000);
+ Assert.assertEquals(2, datanodeCommandHandler.getInvocation());
+ }
+
@Test
public void testGeneratedConfig() {
ReplicationManagerConfiguration rmc =
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]