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:
parent
34c73db5e1
commit
fbf3a9ee3d
|
@ -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)
|
||||
|
|
|
@ -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:");
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue