Author: jing9 Date: Mon Mar 24 21:24:31 2014 New Revision: 1581070 URL: http://svn.apache.org/r1581070 Log: HDFS-6135. In HDFS upgrade with HA setup, JournalNode cannot handle layout version bump when rolling back. Contributed by Jing Zhao.
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JNStorage.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1581070&r1=1581069&r2=1581070&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Mon Mar 24 21:24:31 2014 @@ -677,6 +677,9 @@ Release 2.4.0 - UNRELEASED HDFS-6140. WebHDFS cannot create a file with spaces in the name after HA failover changes. (cnauroth) + HDFS-6135. In HDFS upgrade with HA setup, JournalNode cannot handle layout + version bump when rolling back. (jing9) + BREAKDOWN OF HDFS-5698 SUBTASKS AND RELATED JIRAS HDFS-5717. Save FSImage header in protobuf. (Haohui Mai via jing9) Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JNStorage.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JNStorage.java?rev=1581070&r1=1581069&r2=1581070&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JNStorage.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JNStorage.java Mon Mar 24 21:24:31 2014 @@ -20,6 +20,7 @@ package org.apache.hadoop.hdfs.qjournal. import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -27,6 +28,8 @@ import org.apache.hadoop.conf.Configurat import org.apache.hadoop.fs.FileUtil; 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.InconsistentFSStateException; +import org.apache.hadoop.hdfs.server.common.IncorrectVersionException; import org.apache.hadoop.hdfs.server.common.Storage; import org.apache.hadoop.hdfs.server.common.StorageErrorReporter; import org.apache.hadoop.hdfs.server.namenode.FileJournalManager; @@ -203,6 +206,16 @@ class JNStorage extends Storage { } } + @Override + protected void setLayoutVersion(Properties props, StorageDirectory sd) + throws IncorrectVersionException, InconsistentFSStateException { + int lv = Integer.parseInt(getProperty(props, sd, "layoutVersion")); + // For journal node, since it now does not decode but just scan through the + // edits, it can handle edits with future version in most of the cases. + // Thus currently we may skip the layoutVersion check here. + layoutVersion = lv; + } + void checkConsistentNamespace(NamespaceInfo nsInfo) throws IOException { if (nsInfo.getNamespaceID() != getNamespaceID()) { Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java?rev=1581070&r1=1581069&r2=1581070&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java Mon Mar 24 21:24:31 2014 @@ -227,7 +227,7 @@ public class StorageInfo { : NameNodeLayoutVersion.FEATURES; } - static String getProperty(Properties props, StorageDirectory sd, + protected static String getProperty(Properties props, StorageDirectory sd, String name) throws InconsistentFSStateException { String property = props.getProperty(name); if (property == null) {