Author: eli
Date: Wed Feb 29 19:31:36 2012
New Revision: 1295227
URL: http://svn.apache.org/viewvc?rev=1295227&view=rev
Log:
HDFS-2992. Edit log failure trace should include transaction ID of error.
Contributed by Colin Patrick McCabe
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/server/namenode/FSEditLogLoader.java
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSEditLogLoader.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=1295227&r1=1295226&r2=1295227&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Wed Feb 29
19:31:36 2012
@@ -207,6 +207,9 @@ Release 0.23.3 - UNRELEASED
HDFS-2895. Remove Writable wire protocol types and translators to
complete transition to protocol buffers. (suresh)
+ HDFS-2992. Edit log failure trace should include transaction ID of
+ error. (Colin Patrick McCabe via eli)
+
OPTIMIZATIONS
HDFS-3024. Improve performance of stringification in addStoredBlock (todd)
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java?rev=1295227&r1=1295226&r2=1295227&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
(original)
+++
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
Wed Feb 29 19:31:36 2012
@@ -117,21 +117,20 @@ public class FSEditLogLoader {
long recentOpcodeOffsets[] = new long[4];
Arrays.fill(recentOpcodeOffsets, -1);
+ long txId = expectedStartingTxId - 1;
try {
- long txId = expectedStartingTxId - 1;
-
try {
FSEditLogOp op;
while ((op = in.readOp()) != null) {
recentOpcodeOffsets[numEdits % recentOpcodeOffsets.length] =
in.getPosition();
if (LayoutVersion.supports(Feature.STORED_TXIDS, logVersion)) {
- long thisTxId = op.txid;
- if (thisTxId != txId + 1) {
+ long expectedTxId = txId + 1;
+ txId = op.txid;
+ if (txId != expectedTxId) {
throw new IOException("Expected transaction ID " +
- (txId + 1) + " but got " + thisTxId);
+ expectedTxId + " but got " + txId);
}
- txId = thisTxId;
}
numEdits++;
@@ -415,6 +414,7 @@ public class FSEditLogLoader {
// sort of error might be thrown (NumberFormat, NullPointer, EOF, etc.)
StringBuilder sb = new StringBuilder();
sb.append("Error replaying edit log at offset " + in.getPosition());
+ sb.append("On transaction ID ").append(txId);
if (recentOpcodeOffsets[0] != -1) {
Arrays.sort(recentOpcodeOffsets);
sb.append("\nRecent opcode offsets:");
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSEditLogLoader.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSEditLogLoader.java?rev=1295227&r1=1295226&r2=1295227&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSEditLogLoader.java
(original)
+++
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSEditLogLoader.java
Wed Feb 29 19:31:36 2012
@@ -90,15 +90,17 @@ public class TestFSEditLogLoader {
}
rwf.close();
- String expectedErrorMessage = "^Error replaying edit log at offset \\d+\n";
- expectedErrorMessage += "Recent opcode offsets: (\\d+\\s*){4}$";
+ StringBuilder bld = new StringBuilder();
+ bld.append("^Error replaying edit log at offset \\d+");
+ bld.append("On transaction ID \\d+\n");
+ bld.append("Recent opcode offsets: (\\d+\\s*){4}$");
try {
cluster = new MiniDFSCluster.Builder(conf).numDataNodes(NUM_DATA_NODES)
.format(false).build();
fail("should not be able to start");
} catch (IOException e) {
assertTrue("error message contains opcodes message",
- e.getMessage().matches(expectedErrorMessage));
+ e.getMessage().matches(bld.toString()));
}
}