Author: apurtell
Date: Tue Jul 26 22:31:44 2011
New Revision: 1151281
URL: http://svn.apache.org/viewvc?rev=1151281&view=rev
Log:
HBASE-4139 [stargate] Update ScannerModel with support for filter package
additions
Modified:
hbase/branches/0.90/CHANGES.txt
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
Modified: hbase/branches/0.90/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1151281&r1=1151280&r2=1151281&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Tue Jul 26 22:31:44 2011
@@ -107,6 +107,8 @@ Release 0.90.4 - Unreleased
HBASE-3488 Add CellCounter to count multiple versions of rows (Subbu Iyer)
HBASE-3968 HLog Pretty Printer (Riley Patterson)
HBASE-4142 Advise against large batches in javadoc for
HTable#put(List<Put>)
+ HBASE-4139 [stargate] Update ScannerModel with support for filter package
+ additions
Release 0.90.3 - May 19th, 2011
BUG FIXES
Modified:
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java?rev=1151281&r1=1151280&r2=1151281&view=diff
==============================================================================
---
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
(original)
+++
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
Tue Jul 26 22:31:44 2011
@@ -22,7 +22,6 @@ package org.apache.hadoop.hbase.filter;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
-import java.util.List;
import org.apache.hadoop.hbase.KeyValue;
@@ -51,6 +50,20 @@ public class ColumnPaginationFilter exte
this.offset = offset;
}
+ /**
+ * @return limit
+ */
+ public int getLimit() {
+ return limit;
+ }
+
+ /**
+ * @return offset
+ */
+ public int getOffset() {
+ return offset;
+ }
+
@Override
public ReturnCode filterKeyValue(KeyValue v)
{
Modified:
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java?rev=1151281&r1=1151280&r2=1151281&view=diff
==============================================================================
---
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
(original)
+++
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
Tue Jul 26 22:31:44 2011
@@ -98,8 +98,28 @@ public class DependentColumnFilter exten
final boolean dropDependentColumn) {
this(family, qualifier, dropDependentColumn, CompareOp.NO_OP, null);
}
-
-
+
+ /**
+ * @return the column family
+ */
+ public byte[] getFamily() {
+ return this.columnFamily;
+ }
+
+ /**
+ * @return the column qualifier
+ */
+ public byte[] getQualifier() {
+ return this.columnQualifier;
+ }
+
+ /**
+ * @return true if we should drop the dependent column, false otherwise
+ */
+ public boolean dropDependentColumn() {
+ return this.dropDependentColumn;
+ }
+
@Override
public boolean filterAllRemaining() {
return false;
Modified:
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java?rev=1151281&r1=1151280&r2=1151281&view=diff
==============================================================================
---
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
(original)
+++
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
Tue Jul 26 22:31:44 2011
@@ -3,6 +3,7 @@ package org.apache.hadoop.hbase.filter;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
@@ -44,6 +45,15 @@ public class TimestampsFilter extends Fi
init();
}
+ /**
+ * @return the list of timestamps
+ */
+ public List<Long> getTimestamps() {
+ List<Long> list = new ArrayList<Long>(timestamps.size());
+ list.addAll(timestamps);
+ return list;
+ }
+
private void init() {
if (this.timestamps.size() > 0) {
minTimeStamp = this.timestamps.first();
Modified:
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java?rev=1151281&r1=1151280&r2=1151281&view=diff
==============================================================================
---
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
(original)
+++
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java
Tue Jul 26 22:31:44 2011
@@ -35,25 +35,7 @@ import javax.xml.bind.annotation.XmlRoot
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.filter.BinaryComparator;
-import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
-import org.apache.hadoop.hbase.filter.ColumnCountGetFilter;
-import org.apache.hadoop.hbase.filter.CompareFilter;
-import org.apache.hadoop.hbase.filter.Filter;
-import org.apache.hadoop.hbase.filter.FilterList;
-import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
-import org.apache.hadoop.hbase.filter.InclusiveStopFilter;
-import org.apache.hadoop.hbase.filter.PageFilter;
-import org.apache.hadoop.hbase.filter.PrefixFilter;
-import org.apache.hadoop.hbase.filter.QualifierFilter;
-import org.apache.hadoop.hbase.filter.RegexStringComparator;
-import org.apache.hadoop.hbase.filter.RowFilter;
-import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
-import org.apache.hadoop.hbase.filter.SkipFilter;
-import org.apache.hadoop.hbase.filter.SubstringComparator;
-import org.apache.hadoop.hbase.filter.ValueFilter;
-import org.apache.hadoop.hbase.filter.WhileMatchFilter;
-import org.apache.hadoop.hbase.filter.WritableByteArrayComparable;
+import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
import org.apache.hadoop.hbase.rest.protobuf.generated.ScannerMessage.Scanner;
@@ -106,6 +88,7 @@ public class ScannerModel implements Pro
static class WritableByteArrayComparableModel {
@XmlAttribute public String type;
@XmlAttribute public String value;
+ @XmlAttribute public String op;
static enum ComparatorType {
BinaryComparator,
@@ -138,50 +121,61 @@ public class ScannerModel implements Pro
public WritableByteArrayComparable build() {
WritableByteArrayComparable comparator;
switch (ComparatorType.valueOf(type)) {
- case BinaryComparator: {
+ case BinaryComparator:
comparator = new BinaryComparator(Base64.decode(value));
- } break;
- case BinaryPrefixComparator: {
+ break;
+ case BinaryPrefixComparator:
comparator = new BinaryPrefixComparator(Base64.decode(value));
- } break;
- case RegexStringComparator: {
+ break;
+ case RegexStringComparator:
comparator = new RegexStringComparator(value);
- } break;
- case SubstringComparator: {
+ break;
+ case SubstringComparator:
comparator = new SubstringComparator(value);
- } break;
- default: {
+ break;
+ default:
throw new RuntimeException("unhandled comparator type: " + type);
- }
}
return comparator;
}
}
- // a grab bag of fields, would have been a union if this were C
- @XmlAttribute public String type = null;
- @XmlAttribute public String op = null;
- @XmlElement WritableByteArrayComparableModel comparator = null;
- @XmlAttribute public String value = null;
- @XmlElement public List<FilterModel> filters = null;
- @XmlAttribute public Integer limit = null;
- @XmlAttribute public String family = null;
- @XmlAttribute public String qualifier = null;
- @XmlAttribute public Boolean ifMissing = null;
- @XmlAttribute public Boolean latestVersion = null;
+ // A grab bag of fields, would have been a union if this were C.
+ // These are null by default and will only be serialized if set (non null).
+ @XmlAttribute public String type;
+ @XmlAttribute public String op;
+ @XmlElement WritableByteArrayComparableModel comparator;
+ @XmlAttribute public String value;
+ @XmlElement public List<FilterModel> filters;
+ @XmlAttribute public Integer limit;
+ @XmlAttribute public Integer offset;
+ @XmlAttribute public String family;
+ @XmlAttribute public String qualifier;
+ @XmlAttribute public Boolean ifMissing;
+ @XmlAttribute public Boolean latestVersion;
+ @XmlAttribute public Boolean dropDependentColumn;
+ @XmlElement public List<String> prefixes;
+ @XmlElement public List<Long> timestamps;
static enum FilterType {
ColumnCountGetFilter,
+ ColumnPaginationFilter,
+ ColumnPrefixFilter,
+ DependentColumnFilter,
+ FamilyFilter,
FilterList,
FirstKeyOnlyFilter,
InclusiveStopFilter,
+ KeyOnlyFilter,
PageFilter,
PrefixFilter,
QualifierFilter,
RowFilter,
+ SingleColumnValueExcludeFilter,
SingleColumnValueFilter,
SkipFilter,
+ TimestampsFilter,
ValueFilter,
WhileMatchFilter
}
@@ -196,6 +190,24 @@ public class ScannerModel implements Pro
case ColumnCountGetFilter:
this.limit = ((ColumnCountGetFilter)filter).getLimit();
break;
+ case ColumnPaginationFilter:
+ this.limit = ((ColumnPaginationFilter)filter).getLimit();
+ this.offset = ((ColumnPaginationFilter)filter).getOffset();
+ break;
+ case ColumnPrefixFilter:
+ this.value =
Base64.encodeBytes(((ColumnPrefixFilter)filter).getPrefix());
+ break;
+ case DependentColumnFilter: {
+ DependentColumnFilter dcf = (DependentColumnFilter)filter;
+ this.family = Base64.encodeBytes(dcf.getFamily());
+ byte[] qualifier = dcf.getQualifier();
+ if (qualifier != null) {
+ this.qualifier = Base64.encodeBytes(qualifier);
+ }
+ this.op = dcf.getOperator().toString();
+ this.comparator = new
WritableByteArrayComparableModel(dcf.getComparator());
+ this.dropDependentColumn = dcf.dropDependentColumn();
+ } break;
case FilterList:
this.op = ((FilterList)filter).getOperator().toString();
this.filters = new ArrayList<FilterModel>();
@@ -204,6 +216,7 @@ public class ScannerModel implements Pro
}
break;
case FirstKeyOnlyFilter:
+ case KeyOnlyFilter:
break;
case InclusiveStopFilter:
this.value =
@@ -215,6 +228,7 @@ public class ScannerModel implements Pro
case PrefixFilter:
this.value = Base64.encodeBytes(((PrefixFilter)filter).getPrefix());
break;
+ case FamilyFilter:
case QualifierFilter:
case RowFilter:
case ValueFilter:
@@ -223,6 +237,7 @@ public class ScannerModel implements Pro
new WritableByteArrayComparableModel(
((CompareFilter)filter).getComparator());
break;
+ case SingleColumnValueExcludeFilter:
case SingleColumnValueFilter: {
SingleColumnValueFilter scvf = (SingleColumnValueFilter) filter;
this.family = Base64.encodeBytes(scvf.getFamily());
@@ -244,6 +259,9 @@ public class ScannerModel implements Pro
this.filters = new ArrayList<FilterModel>();
this.filters.add(new FilterModel(((SkipFilter)filter).getFilter()));
break;
+ case TimestampsFilter:
+ this.timestamps = ((TimestampsFilter)filter).getTimestamps();
+ break;
case WhileMatchFilter:
this.filters = new ArrayList<FilterModel>();
this.filters.add(
@@ -257,9 +275,23 @@ public class ScannerModel implements Pro
public Filter build() {
Filter filter;
switch (FilterType.valueOf(type)) {
- case ColumnCountGetFilter: {
+ case ColumnCountGetFilter:
filter = new ColumnCountGetFilter(limit);
- } break;
+ break;
+ case ColumnPaginationFilter:
+ filter = new ColumnPaginationFilter(limit, offset);
+ break;
+ case ColumnPrefixFilter:
+ filter = new ColumnPrefixFilter(Base64.decode(value));
+ break;
+ case DependentColumnFilter:
+ filter = new DependentColumnFilter(Base64.decode(family),
+ qualifier != null ? Base64.decode(qualifier) : null,
+ dropDependentColumn, CompareOp.valueOf(op), comparator.build());
+ break;
+ case FamilyFilter:
+ filter = new FamilyFilter(CompareOp.valueOf(op), comparator.build());
+ break;
case FilterList: {
List<Filter> list = new ArrayList<Filter>();
for (FilterModel model: filters) {
@@ -267,25 +299,28 @@ public class ScannerModel implements Pro
}
filter = new FilterList(FilterList.Operator.valueOf(op), list);
} break;
- case FirstKeyOnlyFilter: {
+ case FirstKeyOnlyFilter:
filter = new FirstKeyOnlyFilter();
- } break;
- case InclusiveStopFilter: {
+ break;
+ case InclusiveStopFilter:
filter = new InclusiveStopFilter(Base64.decode(value));
- } break;
- case PageFilter: {
+ break;
+ case KeyOnlyFilter:
+ filter = new KeyOnlyFilter();
+ break;
+ case PageFilter:
filter = new PageFilter(Long.valueOf(value));
- } break;
- case PrefixFilter: {
+ break;
+ case PrefixFilter:
filter = new PrefixFilter(Base64.decode(value));
- } break;
- case QualifierFilter: {
+ break;
+ case QualifierFilter:
filter = new QualifierFilter(CompareOp.valueOf(op),
comparator.build());
- } break;
- case RowFilter: {
+ break;
+ case RowFilter:
filter = new RowFilter(CompareOp.valueOf(op), comparator.build());
- } break;
- case SingleColumnValueFilter: {
+ break;
+ case SingleColumnValueFilter:
filter = new SingleColumnValueFilter(Base64.decode(family),
qualifier != null ? Base64.decode(qualifier) : null,
CompareOp.valueOf(op), comparator.build());
@@ -295,16 +330,30 @@ public class ScannerModel implements Pro
if (latestVersion != null) {
((SingleColumnValueFilter)filter).setLatestVersionOnly(latestVersion);
}
- } break;
- case SkipFilter: {
+ break;
+ case SingleColumnValueExcludeFilter:
+ filter = new SingleColumnValueExcludeFilter(Base64.decode(family),
+ qualifier != null ? Base64.decode(qualifier) : null,
+ CompareOp.valueOf(op), comparator.build());
+ if (ifMissing != null) {
+
((SingleColumnValueExcludeFilter)filter).setFilterIfMissing(ifMissing);
+ }
+ if (latestVersion != null) {
+
((SingleColumnValueExcludeFilter)filter).setLatestVersionOnly(latestVersion);
+ }
+ break;
+ case SkipFilter:
filter = new SkipFilter(filters.get(0).build());
- } break;
- case ValueFilter: {
+ break;
+ case TimestampsFilter:
+ filter = new TimestampsFilter(timestamps);
+ break;
+ case ValueFilter:
filter = new ValueFilter(CompareOp.valueOf(op), comparator.build());
- } break;
- case WhileMatchFilter: {
+ break;
+ case WhileMatchFilter:
filter = new WhileMatchFilter(filters.get(0).build());
- } break;
+ break;
default:
throw new RuntimeException("unhandled filter type: " + type);
}