From d88d9f2874f5f4ce2b07ba9435094cd4a34fbb31 Mon Sep 17 00:00:00 2001 From: Inigo Goiri Date: Fri, 11 May 2018 09:50:40 -0700 Subject: [PATCH] HDFS-13542. TestBlockManager#testNeededReplicationWhileAppending fails due to improper cluster shutdown in TestBlockManager#testBlockManagerMachinesArray on Windows. Contributed by Anbang Hu. --- .../blockmanagement/TestBlockManager.java | 153 ++++++++++-------- 1 file changed, 84 insertions(+), 69 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java index ad848052ca5..dca3dc8b2c6 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java @@ -441,8 +441,8 @@ public class TestBlockManager { String src = "/test-file"; Path file = new Path(src); MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build(); - cluster.waitActive(); try { + cluster.waitActive(); BlockManager bm = cluster.getNamesystem().getBlockManager(); FileSystem fs = cluster.getFileSystem(); NamenodeProtocols namenode = cluster.getNameNodeRpc(); @@ -481,7 +481,9 @@ public class TestBlockManager { IOUtils.closeStream(out); } } finally { - cluster.shutdown(); + if (cluster != null) { + cluster.shutdown(); + } } } @@ -970,7 +972,9 @@ public class TestBlockManager { assertTrue(fs.exists(file1)); fs.delete(file1, true); assertTrue(!fs.exists(file1)); - cluster.shutdown(); + if (cluster != null) { + cluster.shutdown(); + } } } @@ -1070,7 +1074,9 @@ public class TestBlockManager { assertEquals(0, bm.getBlockOpQueueLength()); assertTrue(doneLatch.await(1, TimeUnit.SECONDS)); } finally { - cluster.shutdown(); + if (cluster != null) { + cluster.shutdown(); + } } } @@ -1145,7 +1151,9 @@ public class TestBlockManager { long batched = MetricsAsserts.getLongCounter("BlockOpsBatched", rb); assertTrue(batched > 0); } finally { - cluster.shutdown(); + if (cluster != null) { + cluster.shutdown(); + } } } @@ -1154,76 +1162,83 @@ public class TestBlockManager { final Configuration conf = new HdfsConfiguration(); final MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).numDataNodes(4).build(); - cluster.waitActive(); - BlockManager blockManager = cluster.getNamesystem().getBlockManager(); - FileSystem fs = cluster.getFileSystem(); - final Path filePath = new Path("/tmp.txt"); - final long fileLen = 1L; - DFSTestUtil.createFile(fs, filePath, fileLen, (short) 3, 1L); - DFSTestUtil.waitForReplication((DistributedFileSystem)fs, - filePath, (short) 3, 60000); - ArrayList datanodes = cluster.getDataNodes(); - assertEquals(datanodes.size(), 4); - FSNamesystem ns = cluster.getNamesystem(); - // get the block - final String bpid = cluster.getNamesystem().getBlockPoolId(); - File storageDir = cluster.getInstanceStorageDir(0, 0); - File dataDir = MiniDFSCluster.getFinalizedDir(storageDir, bpid); - assertTrue("Data directory does not exist", dataDir.exists()); - BlockInfo blockInfo = blockManager.blocksMap.getBlocks().iterator().next(); - ExtendedBlock blk = new ExtendedBlock(bpid, blockInfo.getBlockId(), - blockInfo.getNumBytes(), blockInfo.getGenerationStamp()); - DatanodeDescriptor failedStorageDataNode = - blockManager.getStoredBlock(blockInfo).getDatanode(0); - DatanodeDescriptor corruptStorageDataNode = - blockManager.getStoredBlock(blockInfo).getDatanode(1); + try { + cluster.waitActive(); + BlockManager blockManager = cluster.getNamesystem().getBlockManager(); + FileSystem fs = cluster.getFileSystem(); + final Path filePath = new Path("/tmp.txt"); + final long fileLen = 1L; + DFSTestUtil.createFile(fs, filePath, fileLen, (short) 3, 1L); + DFSTestUtil.waitForReplication((DistributedFileSystem)fs, + filePath, (short) 3, 60000); + ArrayList datanodes = cluster.getDataNodes(); + assertEquals(datanodes.size(), 4); + FSNamesystem ns = cluster.getNamesystem(); + // get the block + final String bpid = cluster.getNamesystem().getBlockPoolId(); + File storageDir = cluster.getInstanceStorageDir(0, 0); + File dataDir = MiniDFSCluster.getFinalizedDir(storageDir, bpid); + assertTrue("Data directory does not exist", dataDir.exists()); + BlockInfo blockInfo = + blockManager.blocksMap.getBlocks().iterator().next(); + ExtendedBlock blk = new ExtendedBlock(bpid, blockInfo.getBlockId(), + blockInfo.getNumBytes(), blockInfo.getGenerationStamp()); + DatanodeDescriptor failedStorageDataNode = + blockManager.getStoredBlock(blockInfo).getDatanode(0); + DatanodeDescriptor corruptStorageDataNode = + blockManager.getStoredBlock(blockInfo).getDatanode(1); - ArrayList reports = new ArrayList(); - for(int i=0; i reports = new ArrayList(); + for(int i=0; i