You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2012/09/04 22:34:15 UTC

svn commit: r1380867 - /hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java

Author: larsh
Date: Tue Sep  4 20:34:15 2012
New Revision: 1380867

URL: http://svn.apache.org/viewvc?rev=1380867&view=rev
Log:
HBASE-6711 Avoid local results copy in StoreScanner

Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java?rev=1380867&r1=1380866&r2=1380867&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java Tue Sep  4 20:34:15 2012
@@ -346,13 +346,13 @@ public class StoreScanner extends NonLaz
 
     KeyValue kv;
     KeyValue prevKV = null;
-    List<KeyValue> results = new ArrayList<KeyValue>();
 
     // Only do a sanity-check if store and comparator are available.
     KeyValue.KVComparator comparator =
         store != null ? store.getComparator() : null;
 
     long cumulativeMetric = 0;
+    int count = 0;
     try {
       LOOP: while((kv = this.heap.peek()) != null) {
         // Check that the heap gives us KVs in an increasing order.
@@ -366,11 +366,11 @@ public class StoreScanner extends NonLaz
           case INCLUDE_AND_SEEK_NEXT_COL:
 
             Filter f = matcher.getFilter();
-            results.add(f == null ? kv : f.transform(kv));
+            outResult.add(f == null ? kv : f.transform(kv));
+            count++;
 
             if (qcode == ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_ROW) {
               if (!matcher.moreRowsMayExistAfter(kv)) {
-                outResult.addAll(results);
                 return false;
               }
               reseek(matcher.getKeyForNextRow(kv));
@@ -381,29 +381,23 @@ public class StoreScanner extends NonLaz
             }
 
             cumulativeMetric += kv.getLength();
-            if (limit > 0 && (results.size() == limit)) {
+            if (limit > 0 && (count == limit)) {
               break LOOP;
             }
             continue;
 
           case DONE:
-            // copy jazz
-            outResult.addAll(results);
             return true;
 
           case DONE_SCAN:
             close();
 
-            // copy jazz
-            outResult.addAll(results);
-
             return false;
 
           case SEEK_NEXT_ROW:
             // This is just a relatively simple end of scan fix, to short-cut end
             // us if there is an endKey in the scan.
             if (!matcher.moreRowsMayExistAfter(kv)) {
-              outResult.addAll(results);
               return false;
             }
 
@@ -438,9 +432,7 @@ public class StoreScanner extends NonLaz
       }
     }
 
-    if (!results.isEmpty()) {
-      // copy jazz
-      outResult.addAll(results);
+    if (count > 0) {
       return true;
     }