HDFS-2992. Edit log failure trace should include transaction ID of error. Contributed by Colin Patrick McCabe

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1295227 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Eli Collins 2012-02-29 19:31:36 +00:00
parent 34c73db5e1
commit fbf3a9ee3d
3 changed files with 14 additions and 9 deletions

View File

@ -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)

View File

@ -117,21 +117,20 @@ public class FSEditLogLoader {
long recentOpcodeOffsets[] = new long[4];
Arrays.fill(recentOpcodeOffsets, -1);
try {
long txId = expectedStartingTxId - 1;
try {
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:");

View File

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