From e98931d11ead2d67e167e433c40ff647b2e90b36 Mon Sep 17 00:00:00 2001 From: Raymond Liu Date: Wed, 6 Mar 2013 13:18:04 +0800 Subject: [PATCH] Make reseek work correctly when invoked for the first time. --- .../hbase/regionserver/StoreFileScanner.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java index 9213f39..ea225c9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java @@ -53,11 +53,6 @@ public class StoreFileScanner implements KeyValueScanner { private boolean enforceMVCC = false; - //The variable, realSeekDone, may cheat on store file scanner for the - // multi-column bloom-filter optimization. - // So this flag shows whether this storeFileScanner could do a reseek. - private boolean isReseekable = false; - private static final AtomicLong seekCount = new AtomicLong(); private ScanQueryMatcher matcher; @@ -148,7 +143,6 @@ public class StoreFileScanner implements KeyValueScanner { return false; } - this.isReseekable = true; cur = hfs.getKeyValue(); return skipKVsNewerThanReadpoint(); @@ -242,6 +236,12 @@ public class StoreFileScanner implements KeyValueScanner { //This function is similar to seekAtOrAfter function int result = s.reseekTo(k.getBuffer(), k.getKeyOffset(), k.getKeyLength()); if (result <= 0) { + // If up to now scanner is not seeked yet, this means passed KV is smaller + // than first KV in file, and it is the first time we seek on this file. + // So we also need to work from the start of file. + if (!s.isSeeked()) { + return s.seekTo(); + } return true; } else { // passed KV is larger than current KV in file, if there is a next @@ -346,7 +346,7 @@ public class StoreFileScanner implements KeyValueScanner { if (realSeekDone) return; - if (delayedReseek && this.isReseekable) { + if (delayedReseek) { reseek(delayedSeekKV); } else { seek(delayedSeekKV); -- 1.7.9.5