HDDS-557. DeadNodeHandler should handle exception from removeContainerHandler api. Contributed by Ajay Kumar.
(cherry picked from commit cc80ac23156e1e91c1f77df65fa53504fbb34141) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/71566354 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/71566354 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/71566354 Branch: refs/heads/ozone-0.2 Commit: 71566354202cce51bd814184632b114255afba84 Parents: 90dfb2f Author: Ajay Kumar <[email protected]> Authored: Mon Oct 1 11:21:26 2018 -0700 Committer: Nanda kumar <[email protected]> Committed: Wed Oct 3 15:24:08 2018 +0530 ---------------------------------------------------------------------- .../hadoop/hdds/scm/node/DeadNodeHandler.java | 16 ++++++++++++-- .../hdds/scm/node/TestDeadNodeHandler.java | 23 ++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/71566354/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DeadNodeHandler.java ---------------------------------------------------------------------- diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DeadNodeHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DeadNodeHandler.java index 88f5df7..253b3ec 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DeadNodeHandler.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DeadNodeHandler.java @@ -72,8 +72,13 @@ public class DeadNodeHandler implements EventHandler<DatanodeDetails> { datanodeDetails.getUuid()); for (ContainerID container : containers) { try { - containerStateManager.removeContainerReplica(container, - datanodeDetails); + try { + containerStateManager.removeContainerReplica(container, + datanodeDetails); + } catch (SCMException ex) { + LOG.info("DataNode {} doesn't have replica for container {}.", + datanodeDetails.getUuid(), container.getId()); + } if (!containerStateManager.isOpen(container)) { ReplicationRequest replicationRequest = @@ -90,4 +95,11 @@ public class DeadNodeHandler implements EventHandler<DatanodeDetails> { } } } + + /** + * Returns logger. + * */ + public static Logger getLogger() { + return LOG; + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/71566354/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java ---------------------------------------------------------------------- diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java index 698332e..6966322 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestDeadNodeHandler.java @@ -196,6 +196,29 @@ public class TestDeadNodeHandler { Assert.assertTrue(nodeStat.get().getScmUsed().get() == 0); } + @Test + public void testOnMessageReplicaFailure() throws Exception { + DatanodeDetails dn1 = TestUtils.randomDatanodeDetails(); + GenericTestUtils.LogCapturer logCapturer = GenericTestUtils.LogCapturer + .captureLogs(DeadNodeHandler.getLogger()); + String storagePath1 = GenericTestUtils.getRandomizedTempPath() + .concat("/" + dn1.getUuidString()); + + StorageReportProto storageOne = TestUtils.createStorageReport( + dn1.getUuid(), storagePath1, 100, 10, 90, null); + nodeReportHandler.onMessage(getNodeReport(dn1, storageOne), + Mockito.mock(EventPublisher.class)); + + ContainerInfo container1 = + TestUtils.allocateContainer(containerStateManager); + registerReplicas(node2ContainerMap, dn1, container1); + + deadNodeHandler.onMessage(dn1, eventQueue); + Assert.assertTrue(logCapturer.getOutput().contains( + "DataNode " + dn1.getUuid() + " doesn't have replica for container " + + container1.getContainerID())); + } + private void registerReplicas(ContainerStateManager csm, ContainerInfo container, DatanodeDetails... datanodes) { csm.getContainerStateMap() --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
