You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2014/09/24 20:22:18 UTC

[3/3] git commit: HBASE-12077 FilterLists create many ArrayList objects per row (Lars Hofhansl)

HBASE-12077 FilterLists create many ArrayList objects per row (Lars Hofhansl)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4ab989c8
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4ab989c8
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4ab989c8

Branch: refs/heads/0.98
Commit: 4ab989c81173c62b6498bdf0c5ba8dad8f99cb81
Parents: 7a7bb13
Author: Andrew Purtell <ap...@apache.org>
Authored: Wed Sep 24 11:12:21 2014 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Wed Sep 24 11:16:04 2014 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/filter/FilterList.java  | 53 +++++++++++++-------
 1 file changed, 34 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/4ab989c8/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
index 0f57e3f..f0c54d6 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
@@ -169,8 +169,9 @@ final public class FilterList extends Filter {
 
   @Override
   public void reset() throws IOException {
-    for (Filter filter : filters) {
-      filter.reset();
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      filters.get(i).reset();
     }
     seekHintFilter = null;
   }
@@ -178,7 +179,9 @@ final public class FilterList extends Filter {
   @Override
   public boolean filterRowKey(byte[] rowKey, int offset, int length) throws IOException {
     boolean flag = (this.operator == Operator.MUST_PASS_ONE) ? true : false;
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       if (this.operator == Operator.MUST_PASS_ALL) {
         if (filter.filterAllRemaining() ||
             filter.filterRowKey(rowKey, offset, length)) {
@@ -196,7 +199,9 @@ final public class FilterList extends Filter {
 
   @Override
   public boolean filterAllRemaining() throws IOException {
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       if (filter.filterAllRemaining()) {
         if (operator == Operator.MUST_PASS_ALL) {
           return true;
@@ -243,7 +248,9 @@ final public class FilterList extends Filter {
 
     ReturnCode rc = operator == Operator.MUST_PASS_ONE?
         ReturnCode.SKIP: ReturnCode.INCLUDE;
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       if (operator == Operator.MUST_PASS_ALL) {
         if (filter.filterAllRemaining()) {
           return ReturnCode.NEXT_ROW;
@@ -310,8 +317,9 @@ final public class FilterList extends Filter {
     // Old filters based off of this class will override KeyValue transform(KeyValue).
     // Thus to maintain compatibility we need to call the old version.
     List<KeyValue> kvs = new ArrayList<KeyValue>(ignored.size());
-    for (Cell c : ignored) {
-      kvs.add(KeyValueUtil.ensureKeyValue(c));
+    int listSize = ignored.size();
+    for (int i=0; i < listSize; i++) {
+      kvs.add(KeyValueUtil.ensureKeyValue(ignored.get(i)));
     }
     filterRow(kvs);
     ignored.clear();
@@ -332,22 +340,25 @@ final public class FilterList extends Filter {
     // #filterRowCells(List<Cell>) which may delegate to legacy #filterRow(List<KV>) 
     List<Cell> cells = new ArrayList<Cell>(kvs.size());
     cells.addAll(kvs);
-    for (Filter filter : filters) {
-      filter.filterRowCells(cells); 
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      filters.get(i).filterRowCells(cells); 
     }
 
     // convert results into kvs
     kvs.clear();
-    for (Cell c : cells) {
-      kvs.add(KeyValueUtil.ensureKeyValue(c));
+    listSize = cells.size();
+    for (int i=0; i < listSize; i++) {
+      kvs.add(KeyValueUtil.ensureKeyValue(cells.get(i)));
     }
   }
   
   @Override
   public boolean hasFilterRow() {
-    for (Filter filter : filters) {
-      if(filter.hasFilterRow()) {
-    	return true;
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      if(filters.get(i).hasFilterRow()) {
+        return true;
       }
     }
     return false;
@@ -355,7 +366,9 @@ final public class FilterList extends Filter {
 
   @Override
   public boolean filterRow() throws IOException {
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       if (operator == Operator.MUST_PASS_ALL) {
         if (filter.filterRow()) {
           return true;
@@ -438,8 +451,9 @@ final public class FilterList extends Filter {
     }
 
     // If any condition can pass, we need to keep the min hint
-    for (Filter filter : filters) {
-      Cell curKeyHint = filter.getNextCellHint(currentKV);
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Cell curKeyHint = filters.get(i).getNextCellHint(currentKV);
       if (curKeyHint == null) {
         // If we ever don't have a hint and this is must-pass-one, then no hint
         return null;
@@ -460,8 +474,9 @@ final public class FilterList extends Filter {
 
   @Override
   public boolean isFamilyEssential(byte[] name) throws IOException {
-    for (Filter filter : filters) {
-      if (filter.isFamilyEssential(name)) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      if (filters.get(i).isFamilyEssential(name)) {
         return true;
       }
     }