Author: eli Date: Wed Mar 7 18:16:29 2012 New Revision: 1298031 URL: http://svn.apache.org/viewvc?rev=1298031&view=rev Log: HDFS-2872. Add sanity checks during edits loading that generation stamps are non-decreasing. Contributed by Colin Patrick McCabe
Modified: hadoop/common/branches/branch-1/CHANGES.txt hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java Modified: hadoop/common/branches/branch-1/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/CHANGES.txt?rev=1298031&r1=1298030&r2=1298031&view=diff ============================================================================== --- hadoop/common/branches/branch-1/CHANGES.txt (original) +++ hadoop/common/branches/branch-1/CHANGES.txt Wed Mar 7 18:16:29 2012 @@ -156,6 +156,8 @@ Release 1.1.0 - unreleased HDFS-2741. Document the max transfer threads property for branch-1. Backport of HDFS-1866. (Markus Jelsma via harsh) + HDFS-2872. Add sanity checks during edits loading that generation + stamps are non-decreasing. (Colin Patrick McCabe via eli) Release 1.0.2 - unreleased Modified: hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java?rev=1298031&r1=1298030&r2=1298031&view=diff ============================================================================== --- hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java (original) +++ hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java Wed Mar 7 18:16:29 2012 @@ -499,7 +499,7 @@ public class FSEditLog { numOpTimes = 0, numOpGetDelegationToken = 0, numOpRenewDelegationToken = 0, numOpCancelDelegationToken = 0, numOpUpdateMasterKey = 0, numOpOther = 0; - + long highestGenStamp = -1; long startTime = FSNamesystem.now(); DataInputStream in = new DataInputStream(new BufferedInputStream(edits)); @@ -710,9 +710,14 @@ public class FSEditLog { case OP_SET_GENSTAMP: { numOpSetGenStamp++; long lw = in.readLong(); + if ((highestGenStamp != -1) && (highestGenStamp + 1 != lw)) { + throw new IOException("OP_SET_GENSTAMP tried to set a genstamp of " + lw + + " but the previous highest genstamp was " + highestGenStamp); + } + highestGenStamp = lw; fsDir.namesystem.setGenerationStamp(lw); break; - } + } case OP_DATANODE_ADD: { numOpOther++; FSImage.DatanodeImage nodeimage = new FSImage.DatanodeImage();