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 to...@apache.org on 2011/06/21 22:14:23 UTC
svn commit: r1138162 - in /hadoop/common/branches/HDFS-1073/hdfs: ./
src/java/org/apache/hadoop/hdfs/server/namenode/
src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/
Author: todd
Date: Tue Jun 21 20:14:22 2011
New Revision: 1138162
URL: http://svn.apache.org/viewvc?rev=1138162&view=rev
Log:
HDFS-2085. Finalize in-progress edit logs at startup. Contributed by Todd Lipcon.
Modified:
hadoop/common/branches/HDFS-1073/hdfs/CHANGES.HDFS-1073.txt
hadoop/common/branches/HDFS-1073/hdfs/src/java/org/apache/hadoop/hdfs/server/namenode/FSImageTransactionalStorageInspector.java
hadoop/common/branches/HDFS-1073/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestFSImageStorageInspector.java
Modified: hadoop/common/branches/HDFS-1073/hdfs/CHANGES.HDFS-1073.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1073/hdfs/CHANGES.HDFS-1073.txt?rev=1138162&r1=1138161&r2=1138162&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1073/hdfs/CHANGES.HDFS-1073.txt (original)
+++ hadoop/common/branches/HDFS-1073/hdfs/CHANGES.HDFS-1073.txt Tue Jun 21 20:14:22 2011
@@ -52,3 +52,4 @@ HDFS-2027. Image inspector should return
logs. (todd)
HDFS-2074. Determine edit log validity by truly reading and validating
transactions. (todd)
+HDFS-2085. Finalize in-progress edit logs at startup. (todd)
Modified: hadoop/common/branches/HDFS-1073/hdfs/src/java/org/apache/hadoop/hdfs/server/namenode/FSImageTransactionalStorageInspector.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1073/hdfs/src/java/org/apache/hadoop/hdfs/server/namenode/FSImageTransactionalStorageInspector.java?rev=1138162&r1=1138161&r2=1138162&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1073/hdfs/src/java/org/apache/hadoop/hdfs/server/namenode/FSImageTransactionalStorageInspector.java (original)
+++ hadoop/common/branches/HDFS-1073/hdfs/src/java/org/apache/hadoop/hdfs/server/namenode/FSImageTransactionalStorageInspector.java Tue Jun 21 20:14:22 2011
@@ -434,6 +434,8 @@ class FSImageTransactionalStorageInspect
for (FoundEditLog log : logs) {
if (log.isCorrupt()) {
log.moveAsideCorruptFile();
+ } else if (log.isInProgress()) {
+ log.finalizeLog();
}
}
}
@@ -476,7 +478,7 @@ class FSImageTransactionalStorageInspect
final StorageDirectory sd;
File file;
final long startTxId;
- final long lastTxId;
+ long lastTxId;
private EditLogValidation cachedValidation = null;
private boolean isCorrupt = false;
@@ -495,6 +497,19 @@ class FSImageTransactionalStorageInspect
this.file = file;
}
+ public void finalizeLog() throws IOException {
+ long numTransactions = validateLog().numTransactions;
+ long lastTxId = startTxId + numTransactions - 1;
+ File dst = new File(file.getParentFile(),
+ NNStorage.getFinalizedEditsFileName(startTxId, lastTxId));
+ if (!file.renameTo(dst)) {
+ throw new IOException("Couldn't finalize log " +
+ file + " to " + dst);
+ }
+ this.lastTxId = lastTxId;
+ file = dst;
+ }
+
long getStartTxId() {
return startTxId;
}
Modified: hadoop/common/branches/HDFS-1073/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestFSImageStorageInspector.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1073/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestFSImageStorageInspector.java?rev=1138162&r1=1138161&r2=1138162&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1073/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestFSImageStorageInspector.java (original)
+++ hadoop/common/branches/HDFS-1073/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestFSImageStorageInspector.java Tue Jun 21 20:14:22 2011
@@ -271,10 +271,14 @@ public class TestFSImageStorageInspector
// Calling recover should move it aside
FoundEditLog badLog = lg.logs.get(2);
Mockito.doNothing().when(badLog).moveAsideCorruptFile();
+ Mockito.doNothing().when(lg.logs.get(0)).finalizeLog();
+ Mockito.doNothing().when(lg.logs.get(1)).finalizeLog();
lg.recover();
Mockito.verify(badLog).moveAsideCorruptFile();
+ Mockito.verify(lg.logs.get(0)).finalizeLog();
+ Mockito.verify(lg.logs.get(1)).finalizeLog();
}
/**