From 8ab0d9897b3c34066cb6c58281e6953c154fe931 Mon Sep 17 00:00:00 2001 From: Raymond Liu Date: Tue, 5 Mar 2013 16:13:21 +0800 Subject: [PATCH] Do not use lazy seek when only one scanner is left. --- .../hadoop/hbase/regionserver/KeyValueHeap.java | 3 ++- .../hbase/regionserver/StoreFileScanner.java | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java index ed501dc..719f556 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyValueHeap.java @@ -315,7 +315,8 @@ public class KeyValueHeap extends NonLazyKeyValueScanner } boolean seekResult; - if (isLazy) { + if (isLazy && (heap.size() > 0)) { + // If there are only one scanner left, we don't do lazy seek. seekResult = scanner.requestSeek(seekKey, forward, useBloom); } else { seekResult = NonLazyKeyValueScanner.doRealSeek( 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..dde319d 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 @@ -161,6 +161,9 @@ public class StoreFileScanner implements KeyValueScanner { } public boolean reseek(KeyValue key) throws IOException { + if (!this.isReseekable) + return seek(key); + seekCount.incrementAndGet(); try { -- 1.7.9.5