HBASE-12077 FilterLists create many ArrayList objects per row (Lars Hofhansl)
Conflicts:
hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8ff5f254
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8ff5f254
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8ff5f254
Branch: refs/heads/branch-1
Commit: 8ff5f2548a5d76692605c1b98a0b2c8d746bfd1b
Parents: 1fbab72
Author: Andrew Purtell <[email protected]>
Authored: Wed Sep 24 11:12:21 2014 -0700
Committer: Andrew Purtell <[email protected]>
Committed: Wed Sep 24 11:14:14 2014 -0700
----------------------------------------------------------------------
.../apache/hadoop/hbase/filter/FilterList.java | 61 +++++++++++++-------
1 file changed, 39 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/8ff5f254/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 c3519d0..579fe2c 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 listize = filters.size();
+ for (int i = 0; i < listize; 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 listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ Filter filter = filters.get(i);
if (this.operator == Operator.MUST_PASS_ALL) {
if (filter.filterAllRemaining() ||
filter.filterRowKey(rowKey, offset, length)) {
@@ -196,8 +199,9 @@ final public class FilterList extends Filter {
@Override
public boolean filterAllRemaining() throws IOException {
- for (Filter filter : filters) {
- if (filter.filterAllRemaining()) {
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ if (filters.get(i).filterAllRemaining()) {
if (operator == Operator.MUST_PASS_ALL) {
return true;
}
@@ -250,7 +254,9 @@ final public class FilterList extends Filter {
ReturnCode rc = operator == Operator.MUST_PASS_ONE?
ReturnCode.SKIP: ReturnCode.INCLUDE;
- for (Filter filter : filters) {
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ Filter filter = filters.get(i);
if (operator == Operator.MUST_PASS_ALL) {
if (filter.filterAllRemaining()) {
return ReturnCode.NEXT_ROW;
@@ -314,16 +320,18 @@ final public class FilterList extends Filter {
*/
@Override
public void filterRowCells(List<Cell> cells) throws IOException {
- for (Filter filter : filters) {
- filter.filterRowCells(cells);
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ filters.get(i).filterRowCells(cells);
}
}
@Override
public boolean hasFilterRow() {
- for (Filter filter : filters) {
- if(filter.hasFilterRow()) {
- return true;
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ if (filters.get(i).hasFilterRow()) {
+ return true;
}
}
return false;
@@ -331,7 +339,9 @@ final public class FilterList extends Filter {
@Override
public boolean filterRow() throws IOException {
- for (Filter filter : filters) {
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ Filter filter = filters.get(i);
if (operator == Operator.MUST_PASS_ALL) {
if (filter.filterRow()) {
return true;
@@ -352,8 +362,9 @@ final public class FilterList extends Filter {
FilterProtos.FilterList.Builder builder =
FilterProtos.FilterList.newBuilder();
builder.setOperator(FilterProtos.FilterList.Operator.valueOf(operator.name()));
- for (Filter filter : filters) {
- builder.addFilters(ProtobufUtil.toFilter(filter));
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ builder.addFilters(ProtobufUtil.toFilter(filters.get(i)));
}
return builder.build().toByteArray();
}
@@ -375,8 +386,11 @@ final public class FilterList extends Filter {
List<Filter> rowFilters = new ArrayList<Filter>(proto.getFiltersCount());
try {
- for (FilterProtos.Filter filter : proto.getFiltersList()) {
- rowFilters.add(ProtobufUtil.toFilter(filter));
+ List<org.apache.hadoop.hbase.protobuf.generated.FilterProtos.Filter>
filtersList =
+ proto.getFiltersList();
+ int listSize = filtersList.size();
+ for (int i = 0; i < listSize; i++) {
+ rowFilters.add(ProtobufUtil.toFilter(filtersList.get(i)));
}
} catch (IOException ioe) {
throw new DeserializationException(ioe);
@@ -414,8 +428,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 listize = filters.size();
+ for (int i = 0; i < listize; 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;
@@ -436,8 +451,9 @@ final public class FilterList extends Filter {
@Override
public boolean isFamilyEssential(byte[] name) throws IOException {
- for (Filter filter : filters) {
- if (filter.isFamilyEssential(name)) {
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ if (filters.get(i).isFamilyEssential(name)) {
return true;
}
}
@@ -446,8 +462,9 @@ final public class FilterList extends Filter {
@Override
public void setReversed(boolean reversed) {
- for (Filter filter : filters) {
- filter.setReversed(reversed);
+ int listize = filters.size();
+ for (int i = 0; i < listize; i++) {
+ filters.get(i).setReversed(reversed);
}
this.reversed = reversed;
}