This is an automated email from the ASF dual-hosted git repository.
sodonnell 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 1a63207add HDDS-7775. EC: Exception encountered while deleting
UNHEALTHY replica in Datanode (#4173)
1a63207add is described below
commit 1a63207add78089cf6b08c9a23eaeb38f7f8ca70
Author: Siddhant Sangwan <[email protected]>
AuthorDate: Thu Jan 12 23:45:06 2023 +0530
HDDS-7775. EC: Exception encountered while deleting UNHEALTHY replica in
Datanode (#4173)
---
.../hadoop/hdds/scm/container/replication/ReplicationManager.java | 5 +++--
.../replication/health/ClosedWithUnhealthyReplicasHandler.java | 2 +-
.../scm/container/replication/health/DeletingContainerHandler.java | 3 ++-
.../hdds/scm/container/replication/health/EmptyContainerHandler.java | 2 +-
.../replication/health/TestClosedWithUnhealthyReplicasHandler.java | 2 +-
.../container/replication/health/TestDeletingContainerHandler.java | 2 +-
.../scm/container/replication/health/TestEmptyContainerHandler.java | 2 +-
7 files changed, 10 insertions(+), 8 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
index 1b5ee43fe3..6f93e81ead 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
@@ -408,14 +408,15 @@ public class ReplicationManager implements SCMService {
* @param container Container to be deleted
* @param replicaIndex Index of the container replica to be deleted
* @param datanode The datanode on which the replica should be deleted
+ * @param force true to force delete a container that is open or not empty
* @throws NotLeaderException when this SCM is not the leader
*/
public void sendDeleteCommand(final ContainerInfo container, int
replicaIndex,
- final DatanodeDetails datanode) throws NotLeaderException {
+ final DatanodeDetails datanode, boolean force) throws NotLeaderException
{
LOG.debug("Sending delete command for container {} and index {} on {}",
container, replicaIndex, datanode);
final DeleteContainerCommand deleteCommand =
- new DeleteContainerCommand(container.containerID(), false);
+ new DeleteContainerCommand(container.containerID(), force);
deleteCommand.setReplicaIndex(replicaIndex);
sendDatanodeCommand(deleteCommand, container, datanode);
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/ClosedWithUnhealthyReplicasHandler.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/ClosedWithUnhealthyReplicasHandler.java
index 3b9b30d3a4..205d41923c 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/ClosedWithUnhealthyReplicasHandler.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/ClosedWithUnhealthyReplicasHandler.java
@@ -121,7 +121,7 @@ public class ClosedWithUnhealthyReplicasHandler extends
AbstractCheck {
LOG.debug("Trying to delete UNHEALTHY replica [{}]", replica);
try {
replicationManager.sendDeleteCommand(containerInfo,
- replica.getReplicaIndex(), replica.getDatanodeDetails());
+ replica.getReplicaIndex(), replica.getDatanodeDetails(), true);
} catch (NotLeaderException e) {
LOG.warn("Failed to delete UNHEALTHY replica [{}]", replica, e);
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/DeletingContainerHandler.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/DeletingContainerHandler.java
index 9bc0160a3b..6da647b70d 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/DeletingContainerHandler.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/DeletingContainerHandler.java
@@ -87,7 +87,8 @@ public class DeletingContainerHandler extends AbstractCheck {
.forEach(rp -> {
try {
replicationManager.sendDeleteCommand(
- containerInfo, rp.getReplicaIndex(), rp.getDatanodeDetails());
+ containerInfo, rp.getReplicaIndex(), rp.getDatanodeDetails(),
+ false);
} catch (NotLeaderException e) {
LOG.warn("Failed to delete empty replica with index {} for " +
"container {} on datanode {}", rp.getReplicaIndex(),
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/EmptyContainerHandler.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/EmptyContainerHandler.java
index 808f3f4165..30f2cb4bb6 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/EmptyContainerHandler.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/health/EmptyContainerHandler.java
@@ -112,7 +112,7 @@ public class EmptyContainerHandler extends AbstractCheck {
try {
replicationManager.sendDeleteCommand(containerInfo,
- rp.getReplicaIndex(), rp.getDatanodeDetails());
+ rp.getReplicaIndex(), rp.getDatanodeDetails(), false);
} catch (NotLeaderException e) {
LOG.warn("Failed to delete empty replica with index {} for container" +
" {} on datanode {}",
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithUnhealthyReplicasHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithUnhealthyReplicasHandler.java
index 1b638b6db9..bf6232329f 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithUnhealthyReplicasHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithUnhealthyReplicasHandler.java
@@ -143,7 +143,7 @@ public class TestClosedWithUnhealthyReplicasHandler {
ArgumentCaptor.forClass(Integer.class);
Mockito.verify(replicationManager, Mockito.times(2))
.sendDeleteCommand(Mockito.eq(container), Mockito.anyInt(),
Mockito.any(
- DatanodeDetails.class));
+ DatanodeDetails.class), Mockito.eq(true));
// replica index that delete was sent for should either be 2 or 5
replicaIndexCaptor.getAllValues()
.forEach(index -> Assert.assertTrue(index == 2 || index == 5));
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestDeletingContainerHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestDeletingContainerHandler.java
index e2a147ffd2..eeaf290c7b 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestDeletingContainerHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestDeletingContainerHandler.java
@@ -233,6 +233,6 @@ public class TestDeletingContainerHandler {
Mockito.verify(replicationManager, Mockito.times(times))
.sendDeleteCommand(Mockito.any(ContainerInfo.class), Mockito.anyInt(),
- Mockito.any(DatanodeDetails.class));
+ Mockito.any(DatanodeDetails.class), Mockito.eq(false));
}
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestEmptyContainerHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestEmptyContainerHandler.java
index bac90b4c39..9585a1a230 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestEmptyContainerHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestEmptyContainerHandler.java
@@ -215,7 +215,7 @@ public class TestEmptyContainerHandler {
Assertions.assertEquals(assertion, emptyContainerHandler.handle(request));
Mockito.verify(replicationManager, Mockito.times(times))
.sendDeleteCommand(Mockito.any(ContainerInfo.class), Mockito.anyInt(),
- Mockito.any(DatanodeDetails.class));
+ Mockito.any(DatanodeDetails.class), Mockito.eq(false));
Assertions.assertEquals(numEmptyExpected, request.getReport().getStat(
ReplicationManagerReport.HealthState.EMPTY));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]