Index: hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java (revision 1531606) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java (working copy) @@ -497,6 +497,8 @@ void close(boolean evictOnClose) throws IOException; DataBlockEncoding getEncodingOnDisk(); + + boolean hasMVCCInfo(); } /** Index: hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (revision 1531606) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (working copy) @@ -387,6 +387,11 @@ return dataBlockEncoder.diskToCacheFormat(hfileBlock, isCompaction); } + @Override + public boolean hasMVCCInfo() { + return includesMemstoreTS && decodeMemstoreTS; + } + /** * Compares the actual type of a block retrieved from cache or disk with its * expected type and throws an exception in case of a mismatch. Expected Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java (revision 1531606) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java (working copy) @@ -1070,7 +1070,7 @@ boolean isCompaction) { return new StoreFileScanner(this, getScanner(cacheBlocks, pread, - isCompaction), !isCompaction); + isCompaction), !isCompaction, reader.hasMVCCInfo()); } /** Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java (revision 1531606) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java (working copy) @@ -53,6 +53,7 @@ private KeyValue delayedSeekKV; private boolean enforceMVCC = false; + private boolean hasMVCCInfo = false; private static AtomicLong seekCount; @@ -62,10 +63,11 @@ * Implements a {@link KeyValueScanner} on top of the specified {@link HFileScanner} * @param hfs HFile scanner */ - public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean useMVCC) { + public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean useMVCC, boolean hasMVCC) { this.reader = reader; this.hfs = hfs; this.enforceMVCC = useMVCC; + this.hasMVCCInfo = hasMVCC; } /** @@ -126,7 +128,8 @@ if (cur != null) { hfs.next(); cur = hfs.getKeyValue(); - skipKVsNewerThanReadpoint(); + if (hasMVCCInfo) + skipKVsNewerThanReadpoint(); } } catch(IOException e) { throw new IOException("Could not iterate " + this, e); @@ -146,7 +149,7 @@ cur = hfs.getKeyValue(); - return skipKVsNewerThanReadpoint(); + return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint(); } finally { realSeekDone = true; } @@ -166,7 +169,7 @@ } cur = hfs.getKeyValue(); - return skipKVsNewerThanReadpoint(); + return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint(); } finally { realSeekDone = true; }