Index: src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (revision 1004809) +++ src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (working copy) @@ -24,6 +24,7 @@ import java.io.InterruptedIOException; import java.io.UnsupportedEncodingException; import java.lang.reflect.Constructor; +import java.text.ParseException; import java.util.AbstractList; import java.util.ArrayList; import java.util.Arrays; @@ -1870,11 +1871,15 @@ "log spliting, so we have this data in another edit. " + "Continuing, but renaming " + edits + " as " + p, eof); } catch (IOException ioe) { - if (ioe.getMessage().startsWith("File is corrupt")) { + // If the IOE resulted from bad file format, + // then this problem is idempotent and retrying won't help + if (ioe.getCause() instanceof ParseException) { Path p = HLog.moveAsideBadEditsFile(fs, edits); LOG.warn("File corruption encountered! " + "Continuing, but renaming " + edits + " as " + p, ioe); } else { + // other IO errors may be transient (bad network connection, + // checksum exception on one datanode, etc). throw & retry throw ioe; } } Index: src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java (revision 1004809) +++ src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java (working copy) @@ -23,6 +23,7 @@ import java.io.EOFException; import java.io.IOException; +import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -246,12 +247,19 @@ LOG.info("EOF from hlog " + logPath + ". continuing"); processedLogs.add(logPath); } catch (IOException e) { - if (skipErrors) { - LOG.warn("Got while parsing hlog " + logPath - + ". Marking as corrupted", e); - corruptedLogs.add(logPath); + // If the IOE resulted from bad file format, + // then this problem is idempotent and retrying won't help + if (e.getCause() instanceof ParseException) { + LOG.warn("ParseException from hlog " + logPath + ". continuing"); + processedLogs.add(logPath); } else { - throw e; + if (skipErrors) { + LOG.info("Got while parsing hlog " + logPath + + ". Marking as corrupted", e); + corruptedLogs.add(logPath); + } else { + throw e; + } } } }