Index: src/main/java/org/apache/hadoop/hbase/regionserver/wal/Compressor.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/wal/Compressor.java (revision 1325585) +++ src/main/java/org/apache/hadoop/hbase/regionserver/wal/Compressor.java (working copy) @@ -145,7 +145,12 @@ // the status byte also acts as the higher order byte of the dictionary // entry short dictIdx = toShort(status, in.readByte()); - byte[] entry = dict.getEntry(dictIdx); + byte[] entry = null; + try { + entry = dict.getEntry(dictIdx); + } catch (IndexOutOfBoundsException iobe) { + // this can happen with a corrupted file, fall through + } if (entry == null) { throw new IOException("Missing dictionary entry for index " + dictIdx); Index: src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceFileLogReader.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceFileLogReader.java (revision 1325585) +++ src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceFileLogReader.java (working copy) @@ -149,7 +149,7 @@ /** * Compression context to use reading. Can be null if no compression. */ - private CompressionContext compressionContext = null; + protected CompressionContext compressionContext = null; protected Class keyClass; Index: src/test/java/org/apache/hadoop/hbase/regionserver/wal/FaultySequenceFileLogReader.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/wal/FaultySequenceFileLogReader.java (revision 1325585) +++ src/test/java/org/apache/hadoop/hbase/regionserver/wal/FaultySequenceFileLogReader.java (working copy) @@ -49,6 +49,9 @@ HLogKey key = HLog.newKey(conf); WALEdit val = new WALEdit(); HLog.Entry e = new HLog.Entry(key, val); + if (compressionContext != null) { + e.setCompressionContext(compressionContext); + } b = this.reader.next(e.getKey(), e.getEdit()); nextQueue.offer(e); numberOfFileEntries++; Index: src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java (revision 1325585) +++ src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java (working copy) @@ -461,15 +461,14 @@ throw t.exception; // Make sure you can read all the content - SequenceFile.Reader reader - = new SequenceFile.Reader(this.fs, walPath, this.conf); + HLog.Reader reader = HLog.getReader(this.fs, walPath, this.conf); int count = 0; - HLogKey key = HLog.newKey(conf); - WALEdit val = new WALEdit(); - while (reader.next(key, val)) { + HLog.Entry entry = new HLog.Entry(); + while (reader.next(entry) != null) { + WALEdit val = entry.getEdit(); count++; assertTrue("Should be one KeyValue per WALEdit", - val.getKeyValues().size() == 1); + val.getKeyValues().size() == 1); } assertEquals(total, count); reader.close();