Repository: hbase
Updated Branches:
  refs/heads/0.94 a6dbb0459 -> c0d9ac9a0


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

Amending-Author: Andrew Purtell <[email protected]>


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

Branch: refs/heads/0.94
Commit: c0d9ac9a0977ae02be51bf23b61826c1b6523021
Parents: a6dbb04
Author: Andrew Purtell <[email protected]>
Authored: Wed Sep 24 11:12:21 2014 -0700
Committer: Andrew Purtell <[email protected]>
Committed: Wed Sep 24 11:21:14 2014 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/filter/FilterList.java  | 43 ++++++++++++++------
 1 file changed, 31 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/c0d9ac9a/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java 
b/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
index 44baf39..d676655 100644
--- a/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
+++ b/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
@@ -180,8 +180,9 @@ public class FilterList implements Filter {
 
   @Override
   public void reset() {
-    for (Filter filter : filters) {
-      filter.reset();
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      filters.get(i).reset();
     }
     seekHintFilter = null;
   }
@@ -189,7 +190,9 @@ public class FilterList implements Filter {
   @Override
   public boolean filterRowKey(byte[] rowKey, int offset, int length) {
     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)) {
@@ -207,7 +210,9 @@ public class FilterList implements Filter {
 
   @Override
   public boolean filterAllRemaining() {
-    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;
@@ -240,7 +245,9 @@ public class FilterList implements 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;
@@ -299,15 +306,19 @@ public class FilterList implements Filter {
 
   @Override
   public void filterRow(List<KeyValue> kvs) {
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       filter.filterRow(kvs);
     }
   }
 
   @Override
   public boolean hasFilterRow() {
-    for (Filter filter : filters) {
-      if(filter.hasFilterRow()) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
+      if (filter.hasFilterRow()) {
        return true;
       }
     }
@@ -316,7 +327,9 @@ public class FilterList implements Filter {
 
   @Override
   public boolean filterRow() {
-    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;
@@ -346,7 +359,9 @@ public class FilterList implements Filter {
   public void write(final DataOutput out) throws IOException {
     out.writeByte(operator.ordinal());
     out.writeInt(filters.size());
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       HbaseObjectWritable.writeObject(out, filter, Writable.class, CONF);
     }
   }
@@ -359,7 +374,9 @@ public class FilterList implements Filter {
       return keyHint;
     }
 
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       KeyValue curKeyHint = filter.getNextKeyHint(currentKV);
       if (curKeyHint == null) {
         // If we ever don't have a hint and this is must-pass-one, then no hint
@@ -381,7 +398,9 @@ public class FilterList implements Filter {
   }
 
   public boolean isFamilyEssential(byte[] name) {
-    for (Filter filter : filters) {
+    int listSize = filters.size();
+    for (int i=0; i < listSize; i++) {
+      Filter filter = filters.get(i);
       if (FilterBase.isFamilyEssential(filter, name)) {
         return true;
       }

Reply via email to