You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by ki...@apache.org on 2013/11/14 16:47:16 UTC
svn commit: r1541939 - in
/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs:
CHANGES.txt
src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceStorage.java
src/test/java/org/apache/hadoop/hdfs/TestDFSRollback.java
Author: kihwal
Date: Thu Nov 14 15:47:16 2013
New Revision: 1541939
URL: http://svn.apache.org/r1541939
Log:
HDFS-3970. Fix bug causing rollback of HDFS upgrade to result in bad VERSION file. Contributed by Vinay and Andrew Wang.
Modified:
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceStorage.java
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSRollback.java
Modified: hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1541939&r1=1541938&r2=1541939&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Thu Nov 14 15:47:16 2013
@@ -53,6 +53,9 @@ Release 0.23.10 - UNRELEASED
HDFS-5357. TestFileSystemAccessService failures in JDK7 (Robert Parker via
jeagles)
+ HDFS-3970. Fix bug causing rollback of HDFS upgrade to result in bad
+ VERSION file. (Vinay and Andrew Wang via atm)
+
Release 0.23.9 - 2013-07-08
INCOMPATIBLE CHANGES
Modified: hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceStorage.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceStorage.java?rev=1541939&r1=1541938&r2=1541939&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceStorage.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceStorage.java Thu Nov 14 15:47:16 2013
@@ -78,6 +78,10 @@ public class BlockPoolSliceStorage exten
this.clusterID = clusterId;
}
+ private BlockPoolSliceStorage() {
+ super(NodeType.DATA_NODE);
+ }
+
/**
* Analyze storage directories. Recover from previous transitions if required.
*
@@ -382,7 +386,7 @@ public class BlockPoolSliceStorage exten
if (!prevDir.exists())
return;
// read attributes out of the VERSION file of previous directory
- DataStorage prevInfo = new DataStorage();
+ BlockPoolSliceStorage prevInfo = new BlockPoolSliceStorage();
prevInfo.readPreviousVersionProperties(bpSd);
// We allow rollback to a state, which is either consistent with
Modified: hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSRollback.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSRollback.java?rev=1541939&r1=1541938&r2=1541939&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSRollback.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSRollback.java Thu Nov 14 15:47:16 2013
@@ -25,11 +25,13 @@ import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import static org.junit.Assert.*;
import junit.framework.TestCase;
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.StorageInfo;
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NodeType;
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.StartupOption;
@@ -172,6 +174,44 @@ public class TestDFSRollback extends Tes
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");