|
@@ -19,6 +19,7 @@ package org.apache.hadoop.hdfs;
|
|
|
|
|
|
import static org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NodeType.DATA_NODE;
|
|
|
import static org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NodeType.NAME_NODE;
|
|
|
+import static org.junit.Assert.*;
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
import static org.junit.Assert.assertFalse;
|
|
|
import static org.junit.Assert.fail;
|
|
@@ -31,6 +32,7 @@ import java.util.List;
|
|
|
import org.apache.commons.logging.Log;
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
import org.apache.hadoop.conf.Configuration;
|
|
|
+import org.apache.hadoop.fs.Path;
|
|
|
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NodeType;
|
|
|
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.StartupOption;
|
|
|
import org.apache.hadoop.hdfs.server.common.StorageInfo;
|
|
@@ -176,6 +178,44 @@ public class TestDFSRollback {
|
|
|
cluster.shutdown();
|
|
|
UpgradeUtilities.createEmptyDirs(nameNodeDirs);
|
|
|
UpgradeUtilities.createEmptyDirs(dataNodeDirs);
|
|
|
+
|
|
|
+ log("Normal BlockPool rollback", numDirs);
|
|
|
+ UpgradeUtilities.createNameNodeStorageDirs(nameNodeDirs, "current");
|
|
|
+ UpgradeUtilities.createNameNodeStorageDirs(nameNodeDirs, "previous");
|
|
|
+ cluster = new MiniDFSCluster.Builder(conf).numDataNodes(0)
|
|
|
+ .format(false)
|
|
|
+ .manageDataDfsDirs(false)
|
|
|
+ .manageNameDfsDirs(false)
|
|
|
+ .startupOption(StartupOption.ROLLBACK)
|
|
|
+ .build();
|
|
|
+ UpgradeUtilities.createDataNodeStorageDirs(dataNodeDirs, "current");
|
|
|
+ UpgradeUtilities.createBlockPoolStorageDirs(dataNodeDirs, "current",
|
|
|
+ UpgradeUtilities.getCurrentBlockPoolID(cluster));
|
|
|
+ // Create a previous snapshot for the blockpool
|
|
|
+ UpgradeUtilities.createBlockPoolStorageDirs(dataNodeDirs, "previous",
|
|
|
+ UpgradeUtilities.getCurrentBlockPoolID(cluster));
|
|
|
+ // Older LayoutVersion to make it rollback
|
|
|
+ storageInfo = new StorageInfo(
|
|
|
+ UpgradeUtilities.getCurrentLayoutVersion()+1,
|
|
|
+ UpgradeUtilities.getCurrentNamespaceID(cluster),
|
|
|
+ UpgradeUtilities.getCurrentClusterID(cluster),
|
|
|
+ UpgradeUtilities.getCurrentFsscTime(cluster));
|
|
|
+ // Create old VERSION file for each data dir
|
|
|
+ for (int i=0; i<dataNodeDirs.length; i++) {
|
|
|
+ Path bpPrevPath = new Path(dataNodeDirs[i] + "/current/"
|
|
|
+ + UpgradeUtilities.getCurrentBlockPoolID(cluster));
|
|
|
+ UpgradeUtilities.createBlockPoolVersionFile(
|
|
|
+ new File(bpPrevPath.toString()),
|
|
|
+ storageInfo,
|
|
|
+ UpgradeUtilities.getCurrentBlockPoolID(cluster));
|
|
|
+ }
|
|
|
+
|
|
|
+ cluster.startDataNodes(conf, 1, false, StartupOption.ROLLBACK, null);
|
|
|
+ assertTrue(cluster.isDataNodeUp());
|
|
|
+
|
|
|
+ cluster.shutdown();
|
|
|
+ UpgradeUtilities.createEmptyDirs(nameNodeDirs);
|
|
|
+ UpgradeUtilities.createEmptyDirs(dataNodeDirs);
|
|
|
|
|
|
log("NameNode rollback without existing previous dir", numDirs);
|
|
|
UpgradeUtilities.createNameNodeStorageDirs(nameNodeDirs, "current");
|