|
@@ -882,9 +882,12 @@ public class TestDecommission {
|
|
|
int numNamenodes = 1;
|
|
|
int numDatanodes = 1;
|
|
|
int replicas = 1;
|
|
|
-
|
|
|
+ conf.setLong(DFSConfigKeys.DFS_BLOCKREPORT_INTERVAL_MSEC_KEY,
|
|
|
+ DFSConfigKeys.DFS_BLOCKREPORT_INTERVAL_MSEC_DEFAULT);
|
|
|
+ conf.setLong(DFSConfigKeys.DFS_BLOCKREPORT_INITIAL_DELAY_KEY, 5);
|
|
|
+
|
|
|
startCluster(numNamenodes, numDatanodes, conf);
|
|
|
- Path file1 = new Path("testDecommission.dat");
|
|
|
+ Path file1 = new Path("testDecommissionWithNamenodeRestart.dat");
|
|
|
FileSystem fileSys = cluster.getFileSystem();
|
|
|
writeFile(fileSys, file1, replicas);
|
|
|
|
|
@@ -894,37 +897,26 @@ public class TestDecommission {
|
|
|
String excludedDatanodeName = info[0].getXferAddr();
|
|
|
|
|
|
writeConfigFile(excludeFile, new ArrayList<String>(Arrays.asList(excludedDatanodeName)));
|
|
|
-
|
|
|
+
|
|
|
//Add a new datanode to cluster
|
|
|
cluster.startDataNodes(conf, 1, true, null, null, null, null);
|
|
|
numDatanodes+=1;
|
|
|
-
|
|
|
+
|
|
|
assertEquals("Number of datanodes should be 2 ", 2, cluster.getDataNodes().size());
|
|
|
//Restart the namenode
|
|
|
cluster.restartNameNode();
|
|
|
DatanodeInfo datanodeInfo = NameNodeAdapter.getDatanode(
|
|
|
cluster.getNamesystem(), excludedDatanodeID);
|
|
|
waitNodeState(datanodeInfo, AdminStates.DECOMMISSIONED);
|
|
|
-
|
|
|
+
|
|
|
// Ensure decommissioned datanode is not automatically shutdown
|
|
|
assertEquals("All datanodes must be alive", numDatanodes,
|
|
|
client.datanodeReport(DatanodeReportType.LIVE).length);
|
|
|
- // wait for the block to be replicated
|
|
|
- int tries = 0;
|
|
|
- while (tries++ < 20) {
|
|
|
- try {
|
|
|
- Thread.sleep(1000);
|
|
|
- if (checkFile(fileSys, file1, replicas, datanodeInfo.getXferAddr(),
|
|
|
- numDatanodes) == null) {
|
|
|
- break;
|
|
|
- }
|
|
|
- } catch (InterruptedException ie) {
|
|
|
- }
|
|
|
- }
|
|
|
- assertTrue("Checked if block was replicated after decommission, tried "
|
|
|
- + tries + " times.", tries < 20);
|
|
|
- cleanupFile(fileSys, file1);
|
|
|
+ assertTrue("Checked if block was replicated after decommission.",
|
|
|
+ checkFile(fileSys, file1, replicas, datanodeInfo.getXferAddr(),
|
|
|
+ numDatanodes) == null);
|
|
|
|
|
|
+ cleanupFile(fileSys, file1);
|
|
|
// Restart the cluster and ensure recommissioned datanodes
|
|
|
// are allowed to register with the namenode
|
|
|
cluster.shutdown();
|