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();