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; }
