HDFS-13554. TestDatanodeRegistration#testForcedRegistration does not shut down cluster. Contributed by Anbang Hu.
(cherry picked from commit 65476458fa05656010809be632356e4015b59a17) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/315ffd1a Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/315ffd1a Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/315ffd1a Branch: refs/heads/branch-2 Commit: 315ffd1ada2ca3d7fe16b16a2c80d695520b228e Parents: b87cd63 Author: Inigo Goiri <inigo...@apache.org> Authored: Thu May 17 14:48:04 2018 -0700 Committer: Inigo Goiri <inigo...@apache.org> Committed: Thu May 17 14:49:37 2018 -0700 ---------------------------------------------------------------------- .../hadoop/hdfs/TestDatanodeRegistration.java | 149 ++++++++++--------- 1 file changed, 78 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/315ffd1a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDatanodeRegistration.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDatanodeRegistration.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDatanodeRegistration.java index 46bf2ca..4916f8a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDatanodeRegistration.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDatanodeRegistration.java @@ -331,86 +331,93 @@ public class TestDatanodeRegistration { conf.setInt(DFSConfigKeys.DFS_NAMENODE_HANDLER_COUNT_KEY, 4); conf.setLong(DFSConfigKeys.DFS_BLOCKREPORT_INTERVAL_MSEC_KEY, Integer.MAX_VALUE); - final MiniDFSCluster cluster = - new MiniDFSCluster.Builder(conf).numDataNodes(1).build(); - cluster.waitActive(); - cluster.getHttpUri(0); - FSNamesystem fsn = cluster.getNamesystem(); - String bpId = fsn.getBlockPoolId(); + MiniDFSCluster cluster = null; + try { + cluster = new MiniDFSCluster.Builder(conf).numDataNodes(1).build(); + cluster.waitActive(); + cluster.getHttpUri(0); + FSNamesystem fsn = cluster.getNamesystem(); + String bpId = fsn.getBlockPoolId(); - DataNode dn = cluster.getDataNodes().get(0); - DatanodeDescriptor dnd = - NameNodeAdapter.getDatanode(fsn, dn.getDatanodeId()); - DataNodeTestUtils.setHeartbeatsDisabledForTests(dn, true); - DatanodeStorageInfo storage = dnd.getStorageInfos()[0]; + DataNode dn = cluster.getDataNodes().get(0); + DatanodeDescriptor dnd = + NameNodeAdapter.getDatanode(fsn, dn.getDatanodeId()); + DataNodeTestUtils.setHeartbeatsDisabledForTests(dn, true); + DatanodeStorageInfo storage = dnd.getStorageInfos()[0]; - // registration should not change after heartbeat. - assertTrue(dnd.isRegistered()); - DatanodeRegistration lastReg = dn.getDNRegistrationForBP(bpId); - waitForHeartbeat(dn, dnd); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + // registration should not change after heartbeat. + assertTrue(dnd.isRegistered()); + DatanodeRegistration lastReg = dn.getDNRegistrationForBP(bpId); + waitForHeartbeat(dn, dnd); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - // force a re-registration on next heartbeat. - dnd.setForceRegistration(true); - assertFalse(dnd.isRegistered()); - waitForHeartbeat(dn, dnd); - assertTrue(dnd.isRegistered()); - DatanodeRegistration newReg = dn.getDNRegistrationForBP(bpId); - assertNotSame(lastReg, newReg); - lastReg = newReg; + // force a re-registration on next heartbeat. + dnd.setForceRegistration(true); + assertFalse(dnd.isRegistered()); + waitForHeartbeat(dn, dnd); + assertTrue(dnd.isRegistered()); + DatanodeRegistration newReg = dn.getDNRegistrationForBP(bpId); + assertNotSame(lastReg, newReg); + lastReg = newReg; - // registration should not change on subsequent heartbeats. - waitForHeartbeat(dn, dnd); - assertTrue(dnd.isRegistered()); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - assertTrue(waitForBlockReport(dn, dnd)); - assertTrue(dnd.isRegistered()); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + // registration should not change on subsequent heartbeats. + waitForHeartbeat(dn, dnd); + assertTrue(dnd.isRegistered()); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + assertTrue(waitForBlockReport(dn, dnd)); + assertTrue(dnd.isRegistered()); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - // check that block report is not processed and registration didn't change. - dnd.setForceRegistration(true); - assertFalse(waitForBlockReport(dn, dnd)); - assertFalse(dnd.isRegistered()); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + // check that block report is not processed and registration didn't + // change. + dnd.setForceRegistration(true); + assertFalse(waitForBlockReport(dn, dnd)); + assertFalse(dnd.isRegistered()); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - // heartbeat should trigger re-registration, and next block report should - // not change registration. - waitForHeartbeat(dn, dnd); - assertTrue(dnd.isRegistered()); - newReg = dn.getDNRegistrationForBP(bpId); - assertNotSame(lastReg, newReg); - lastReg = newReg; - assertTrue(waitForBlockReport(dn, dnd)); - assertTrue(dnd.isRegistered()); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + // heartbeat should trigger re-registration, and next block report + // should not change registration. + waitForHeartbeat(dn, dnd); + assertTrue(dnd.isRegistered()); + newReg = dn.getDNRegistrationForBP(bpId); + assertNotSame(lastReg, newReg); + lastReg = newReg; + assertTrue(waitForBlockReport(dn, dnd)); + assertTrue(dnd.isRegistered()); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - // registration doesn't change. - ExtendedBlock eb = new ExtendedBlock(bpId, 1234); - dn.notifyNamenodeDeletedBlock(eb, storage.getStorageID()); - DataNodeTestUtils.triggerDeletionReport(dn); - assertTrue(dnd.isRegistered()); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + // registration doesn't change. + ExtendedBlock eb = new ExtendedBlock(bpId, 1234); + dn.notifyNamenodeDeletedBlock(eb, storage.getStorageID()); + DataNodeTestUtils.triggerDeletionReport(dn); + assertTrue(dnd.isRegistered()); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - // a failed IBR will effectively unregister the node. - boolean failed = false; - try { - // pass null to cause a failure since there aren't any easy failure - // modes since it shouldn't happen. - fsn.processIncrementalBlockReport(lastReg, null); - } catch (NullPointerException npe) { - failed = true; - } - assertTrue("didn't fail", failed); - assertFalse(dnd.isRegistered()); + // a failed IBR will effectively unregister the node. + boolean failed = false; + try { + // pass null to cause a failure since there aren't any easy failure + // modes since it shouldn't happen. + fsn.processIncrementalBlockReport(lastReg, null); + } catch (NullPointerException npe) { + failed = true; + } + assertTrue("didn't fail", failed); + assertFalse(dnd.isRegistered()); - // should remain unregistered until next heartbeat. - dn.notifyNamenodeDeletedBlock(eb, storage.getStorageID()); - DataNodeTestUtils.triggerDeletionReport(dn); - assertFalse(dnd.isRegistered()); - assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); - waitForHeartbeat(dn, dnd); - assertTrue(dnd.isRegistered()); - assertNotSame(lastReg, dn.getDNRegistrationForBP(bpId)); + // should remain unregistered until next heartbeat. + dn.notifyNamenodeDeletedBlock(eb, storage.getStorageID()); + DataNodeTestUtils.triggerDeletionReport(dn); + assertFalse(dnd.isRegistered()); + assertSame(lastReg, dn.getDNRegistrationForBP(bpId)); + waitForHeartbeat(dn, dnd); + assertTrue(dnd.isRegistered()); + assertNotSame(lastReg, dn.getDNRegistrationForBP(bpId)); + } finally { + if (cluster != null) { + cluster.shutdown(); + } + } } private void waitForHeartbeat(final DataNode dn, final DatanodeDescriptor dnd) --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org