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 2009/07/01 10:18:27 UTC
svn commit: r790059 - in /hadoop/hbase/trunk_on_hadoop-0.18.3: ./
src/java/org/apache/hadoop/hbase/ src/java/org/apache/hadoop/hbase/client/
src/java/org/apache/hadoop/hbase/filter/
src/java/org/apache/hadoop/hbase/io/ src/test/org/apache/hadoop/hbase/...
Author: apurtell
Date: Wed Jul 1 08:18:26 2009
New Revision: 790059
URL: http://svn.apache.org/viewvc?rev=790059&view=rev
Log:
HBASE-1594, HBASE-1595, HBABSE-1385
Added:
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestInclusiveStopFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestValueFilter.java
Removed:
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/RowPrefixFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/DisabledTestInclusiveStopRowFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/DisabledTestPrefixRowFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/DisabledTestRegExpRowFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/DisabledTestRowFilterOnMultipleFamilies.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/DisabledTestRowFilterSet.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestColumnValueFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestRowPrefixFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestStopRowFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestWhileMatchRowFilter.java
Modified:
hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt
hadoop/hbase/trunk_on_hadoop-0.18.3/build.xml
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/KeyValue.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/client/Scan.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/RegExpRowFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ValueFilter.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/WritableByteArrayComparable.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/package-info.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseClusterTestCase.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseTestCase.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/PerformanceEvaluation.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/TimestampTestBase.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestOldAPITimestamp.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestTimestamp.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestFilterSet.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java
hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestScanner.java
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/CHANGES.txt Wed Jul 1 08:18:26 2009
@@ -23,6 +23,8 @@
can't find the master
HBASE-1304 New client server implementation of how gets and puts are
handled (holstad, jgray, rawson, stack)
+ HBASE-1582 Translate ColumnValueFilter and RowFilterSet to the new
+ Filter interface (Clint Morgan and Stack)
BUG FIXES
HBASE-1140 "ant clean test" fails (Nitay Joffe via Stack)
@@ -235,6 +237,8 @@
HBASE-1437 broken links in hbase.org
HBASE-1582 Translate ColumnValueFilter and RowFilterSet to the new Filter
interface
+ HBASE-1594 Fix scan addcolumns after hbase-1385 commit (broken hudson build)
+ HBASE-1595 hadoop-default.xml and zoo.cfg in hbase jar
IMPROVEMENTS
HBASE-1089 Add count of regions on filesystem to master UI; add percentage
@@ -421,6 +425,9 @@
HBASE-1587 Update ganglia config and doc to account for ganglia 3.1 and
hadoop-4675
HBASE-1589 Up zk maxClientCnxns from default of 10 to 20 or 30 or so
+ HBASE-1385 Revamp TableInputFormat, needs updating to match hadoop 0.20.x
+ AND remove bit where we can make < maps than regions
+ (Lars George via Stack)
OPTIMIZATIONS
HBASE-1412 Change values for delete column and column family in KeyValue
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/build.xml
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/build.xml?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/build.xml (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/build.xml Wed Jul 1 08:18:26 2009
@@ -21,7 +21,7 @@
<property name="version" value="0.20.0-dev-0.18.3"/>
<property name="Name" value="HBase"/>
<property name="final.name" value="hbase-${version}"/>
- <property name="year" value="2008"/>
+ <property name="year" value="2009"/>
<!-- Load all the default properties, and any the user wants -->
<!-- to contribute (without having to type -D or edit this file -->
@@ -182,10 +182,13 @@
</fileset>
</copy>
<jar jarfile="${jarfile}" basedir="${build.classes}" >
+ <fileset dir="${conf.dir}" >
+ <include name="hbase-default.xml" />
+ </fileset>
<zipfileset dir="conf" prefix="conf" includes="zoo.cfg,hbase-default.xml" />
<zipfileset dir="${build.webapps}" prefix="webapps"/>
<manifest>
- <attribute name="Main-Class" value="org/apache/hadoop/hbase/mapred/Driver" />
+ <attribute name="Main-Class" value="org/apache/hadoop/hbase/mapreduce/Driver" />
</manifest>
</jar>
</target>
@@ -514,7 +517,9 @@
</subant>
</target>
- <target name="test" depends="test-core, test-contrib"
+ <!-- REENABLE!!! <target name="test" depends="test-core, test-contrib"
+ -->
+ <target name="test" depends="test-core"
description="Run core, contrib unit tests">
</target>
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/KeyValue.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/KeyValue.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/KeyValue.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/KeyValue.java Wed Jul 1 08:18:26 2009
@@ -1183,9 +1183,12 @@
*/
public static byte [][] parseColumn(byte [] c) {
final byte [][] result = new byte [2][];
- final int index = getFamilyDelimiterIndex(c, 0, c.length);
+ final int index = getDelimiter(c, 0, c.length, COLUMN_FAMILY_DELIMITER);
if (index == -1) {
- throw new IllegalArgumentException("Impossible column name: " + c);
+ // If no delimiter, return <code>c</code> as family and null qualifier.
+ result[0] = c;
+ result[1] = null;
+ return result;
}
result[0] = new byte [index];
System.arraycopy(c, 0, result[0], 0, index);
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/client/Scan.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/client/Scan.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/client/Scan.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/client/Scan.java Wed Jul 1 08:18:26 2009
@@ -109,6 +109,33 @@
}
/**
+ * Creates a new instance of this class while copying all values.
+ *
+ * @param scan The scan instance to copy from.
+ * @throws IOException When copying the values fails.
+ */
+ public Scan(Scan scan) throws IOException {
+ startRow = scan.getStartRow();
+ stopRow = scan.getStopRow();
+ maxVersions = scan.getMaxVersions();
+ filter = scan.getFilter(); // clone?
+ oldFilter = scan.getOldFilter(); // clone?
+ TimeRange ctr = scan.getTimeRange();
+ tr = new TimeRange(ctr.getMin(), ctr.getMax());
+ Map<byte[], NavigableSet<byte[]>> fams = scan.getFamilyMap();
+ for (byte[] fam : fams.keySet()) {
+ NavigableSet<byte[]> cols = fams.get(fam);
+ if (cols != null && cols.size() > 0) {
+ for (byte[] col : cols) {
+ addColumn(fam, col);
+ }
+ } else {
+ addFamily(fam);
+ }
+ }
+ }
+
+ /**
* Get all columns from the specified family.
* <p>
* Overrides previous calls to addColumn for this family.
@@ -137,26 +164,89 @@
return this;
}
+
+ /**
+ * Parses a combined family and qualifier and adds either both or just the
+ * family in case there is not qualifier. This assumes the older colon
+ * divided notation, e.g. "data:contents" or "meta:".
+ * <p>
+ * Note: It will through an error when the colon is missing.
+ *
+ * @param familyAndQualifier
+ * @return A reference to this instance.
+ * @throws IllegalArgumentException When the colon is missing.
+ */
+ public Scan addColumn(byte[] familyAndQualifier) {
+ byte [][] fq = KeyValue.parseColumn(familyAndQualifier);
+ if (fq.length > 1 && fq[1] != null && fq[1].length > 0) {
+ addColumn(fq[0], fq[1]);
+ } else {
+ addFamily(fq[0]);
+ }
+ return this;
+ }
/**
- * Adds an array of columns specified the old format, family:qualifier.
+ * Adds an array of columns specified using old format, family:qualifier.
* <p>
* Overrides previous calls to addFamily for any families in the input.
+ *
* @param columns array of columns, formatted as <pre>family:qualifier</pre>
*/
public Scan addColumns(byte [][] columns) {
- for(int i=0; i<columns.length; i++) {
- try {
- byte [][] split = KeyValue.parseColumn(columns[i]);
- if (split[1].length == 0) {
- addFamily(split[0]);
- } else {
- addColumn(split[0], split[1]);
- }
- } catch(Exception e) {}
+ for (int i = 0; i < columns.length; i++) {
+ addColumn(columns[i]);
}
return this;
}
+
+ /**
+ * Convenience method to help parse old style (or rather user entry on the
+ * command line) column definitions, e.g. "data:contents mime:". The columns
+ * must be space delimited and always have a colon (":") to denote family
+ * and qualifier.
+ *
+ * @param columns The columns to parse.
+ * @return A reference to this instance.
+ */
+ public Scan addColumns(String columns) {
+ String[] cols = columns.split(" ");
+ for (String col : cols) {
+ addColumn(Bytes.toBytes(col));
+ }
+ return this;
+ }
+
+ /**
+ * Helps to convert the binary column families and qualifiers to a text
+ * representation, e.g. "data:mimetype data:contents meta:". Binary values
+ * are properly encoded using {@link Bytes#toBytesBinary(String)}.
+ *
+ * @return The columns in an old style string format.
+ */
+ public String getInputColumns() {
+ String cols = "";
+ for (Map.Entry<byte[], NavigableSet<byte[]>> e :
+ familyMap.entrySet()) {
+ byte[] fam = e.getKey();
+ if (cols.length() > 0) cols += " ";
+ NavigableSet<byte[]> quals = e.getValue();
+ // check if this family has qualifiers
+ if (quals != null && quals.size() > 0) {
+ String cs = "";
+ for (byte[] qual : quals) {
+ if (cs.length() > 0) cs += " ";
+ // encode values to make parsing easier later
+ cs += Bytes.toStringBinary(fam) + ":" + Bytes.toStringBinary(qual);
+ }
+ cols += cs;
+ } else {
+ // only add the family but with old style delimiter
+ cols += Bytes.toStringBinary(fam) + ":";
+ }
+ }
+ return cols;
+ }
/**
* Get versions of columns only within the specified timestamp range,
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java Wed Jul 1 08:18:26 2009
@@ -41,7 +41,7 @@
* lexicographic compare. If this is not sufficient (eg you want to deserialize
* a long and then compare it to a fixed long value), then you can pass in your
* own comparator instead.
- * @deprecated Use filters that are rooted on @{link Filter} instead
+ * @deprecated Use filters that are rooted on @{link Filter} instead.
*/
public class ColumnValueFilter implements RowFilterInterface {
/** Comparison operators. */
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java Wed Jul 1 08:18:26 2009
@@ -56,7 +56,8 @@
return false;
}
// if stopRowKey is <= buffer, then true, filter row.
- return Bytes.compareTo(stopRowKey, 0, stopRowKey.length, buffer, offset, length) < 0;
+ return Bytes.compareTo(stopRowKey, 0, stopRowKey.length,
+ buffer, offset, length) < 0;
}
public boolean filterAllRemaining() {
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/RegExpRowFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/RegExpRowFilter.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/RegExpRowFilter.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/RegExpRowFilter.java Wed Jul 1 08:18:26 2009
@@ -43,9 +43,8 @@
*
* Note that column value filtering in this interface has been replaced by
* {@link ColumnValueFilter}.
- * @deprecated This interface doesn't really work well in new KeyValue world.
- * Needs to be refactored/removed. Marking it as deprecated till it gets
- * cleaned up. Its also inefficient as written.
+ * @deprecated This interface doesn't work well in new KeyValue world.
+ * Use filters based on new {@link Filter} instead.
*/
public class RegExpRowFilter implements RowFilterInterface {
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ValueFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ValueFilter.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ValueFilter.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/ValueFilter.java Wed Jul 1 08:18:26 2009
@@ -35,7 +35,9 @@
* This filter is used to filter based on the value of a given column. It takes
* an operator (equal, greater, not equal, etc) and either a byte [] value or a
* byte [] comparator. If we have a byte [] value then we just do a
- * lexicographic compare. If this is not sufficient (eg you want to deserialize
+ * lexicographic compare. For example, if passed value is 'b' and cell has 'a'
+ * and the compare operator is LESS, then we will filter out this cell (return
+ * true). If this is not sufficient (eg you want to deserialize
* a long and then compare it to a fixed long value), then you can pass in your
* own comparator instead.
* */
@@ -58,12 +60,16 @@
GREATER;
}
- private byte[] columnName;
+ private byte [] columnFamily;
+ private byte [] columnQualifier;
private CompareOp compareOp;
- private byte[] value;
+ private byte [] value;
private WritableByteArrayComparable comparator;
private boolean filterIfColumnMissing;
+ private boolean filterThisRow = false;
+ private boolean foundColValue = false;
+
ValueFilter() {
// for Writable
}
@@ -71,27 +77,31 @@
/**
* Constructor.
*
- * @param columnName name of column
+ * @param family name of column family
+ * @param qualifier name of column qualifier
* @param compareOp operator
* @param value value to compare column values against
*/
- public ValueFilter(final byte[] columnName, final CompareOp compareOp,
- final byte[] value) {
- this(columnName, compareOp, value, true);
+ public ValueFilter(final byte [] family, final byte [] qualifier,
+ final CompareOp compareOp, final byte[] value) {
+ this(family, qualifier, compareOp, value, true);
}
/**
* Constructor.
*
- * @param columnName name of column
+ * @param family name of column family
+ * @param qualifier name of column qualifier
* @param compareOp operator
* @param value value to compare column values against
* @param filterIfColumnMissing if true then we will filter rows that don't
* have the column.
*/
- public ValueFilter(final byte[] columnName, final CompareOp compareOp,
+ public ValueFilter(final byte [] family, final byte [] qualifier,
+ final CompareOp compareOp,
final byte[] value, boolean filterIfColumnMissing) {
- this.columnName = columnName;
+ this.columnFamily = family;
+ this.columnQualifier = qualifier;
this.compareOp = compareOp;
this.value = value;
this.filterIfColumnMissing = filterIfColumnMissing;
@@ -100,28 +110,33 @@
/**
* Constructor.
*
- * @param columnName name of column
+ * @param family name of column family
+ * @param qualifier name of column qualifier
* @param compareOp operator
* @param comparator Comparator to use.
*/
- public ValueFilter(final byte[] columnName, final CompareOp compareOp,
+ public ValueFilter(final byte [] family, final byte [] qualifier,
+ final CompareOp compareOp,
final WritableByteArrayComparable comparator) {
- this(columnName, compareOp, comparator, true);
+ this(family, qualifier, compareOp, comparator, true);
}
/**
* Constructor.
*
- * @param columnName name of column
+ * @param family name of column family
+ * @param qualifier name of column qualifier
* @param compareOp operator
* @param comparator Comparator to use.
* @param filterIfColumnMissing if true then we will filter rows that don't
* have the column.
*/
- public ValueFilter(final byte[] columnName, final CompareOp compareOp,
+ public ValueFilter(final byte [] family, final byte [] qualifier,
+ final CompareOp compareOp,
final WritableByteArrayComparable comparator,
boolean filterIfColumnMissing) {
- this.columnName = columnName;
+ this.columnFamily = family;
+ this.columnQualifier = qualifier;
this.compareOp = compareOp;
this.comparator = comparator;
this.filterIfColumnMissing = filterIfColumnMissing;
@@ -131,22 +146,15 @@
return false;
}
- private boolean filterThisRow = false;
- private boolean foundColValue = false;
-
public ReturnCode filterKeyValue(KeyValue keyValue) {
- if (Bytes.compareTo(keyValue.getColumn(), this.columnName) != 0) {
+ if (!keyValue.matchingColumn(this.columnFamily, this.columnQualifier)) {
return ReturnCode.INCLUDE;
}
- LOG.info("Found column [" + Bytes.toString(columnName) + "] in row ["
- + Bytes.toString(keyValue.getRow()) + "]");
- foundColValue = true;
-
- boolean filtered = filterColumnValue(keyValue.getBuffer(), keyValue
- .getValueOffset(), keyValue.getValueLength());
+ this.foundColValue = true;
+ boolean filtered = filterColumnValue(keyValue.getBuffer(),
+ keyValue.getValueOffset(), keyValue.getValueLength());
if (filtered) {
- LOG.info("filtered it");
- filterThisRow = true;
+ this.filterThisRow = true;
return ReturnCode.NEXT_ROW;
}
return ReturnCode.INCLUDE;
@@ -189,7 +197,6 @@
boolean result = filterThisRow || (filterIfColumnMissing && !foundColValue);
filterThisRow = false;
foundColValue = false;
- LOG.info("Deciding " + (result ? "" : " not ") + "to filter");
return result;
}
@@ -203,7 +210,8 @@
value = new byte[valueLen];
in.readFully(value);
}
- columnName = Bytes.readByteArray(in);
+ this.columnFamily = Bytes.readByteArray(in);
+ this.columnQualifier = Bytes.readByteArray(in);
compareOp = CompareOp.valueOf(in.readUTF());
comparator = (WritableByteArrayComparable) ObjectWritable.readObject(in,
new HBaseConfiguration());
@@ -217,7 +225,8 @@
out.writeInt(value.length);
out.write(value);
}
- Bytes.writeByteArray(out, columnName);
+ Bytes.writeByteArray(out, this.columnFamily);
+ Bytes.writeByteArray(out, this.columnQualifier);
out.writeUTF(compareOp.name());
ObjectWritable.writeObject(out, comparator,
WritableByteArrayComparable.class, new HBaseConfiguration());
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/WritableByteArrayComparable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/WritableByteArrayComparable.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/WritableByteArrayComparable.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/WritableByteArrayComparable.java Wed Jul 1 08:18:26 2009
@@ -22,7 +22,6 @@
import org.apache.hadoop.io.Writable;
/** Interface for both Comparable<byte []> and Writable. */
-public interface WritableByteArrayComparable extends Writable,
- Comparable<byte[]> {
+public interface WritableByteArrayComparable extends Writable, Comparable<byte[]> {
// Not methods, just tie the two interfaces together.
}
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/package-info.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/package-info.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/package-info.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/filter/package-info.java Wed Jul 1 08:18:26 2009
@@ -20,8 +20,9 @@
/**Provides row-level filters applied to HRegion scan results during calls to
* {@link org.apache.hadoop.hbase.client.ResultScanner#next()}.
-<p>Since HBase 0.20.0, {@link org.apache.hadoop.hbase.filter.Filter} is the new Interface used filtering.
-It replaces the deprecated {@link org.apache.hadoop.hbase.filter.RowFilterInterface}.
+<p>Since HBase 0.20.0, {@link org.apache.hadoop.hbase.filter.Filter} is the new
+Interface used filtering. It replaces the deprecated
+{@link org.apache.hadoop.hbase.filter.RowFilterInterface}.
Filters run the extent of a table unless you wrap your filter in a
{@link org.apache.hadoop.hbase.filter.WhileMatchFilter}.
The latter returns as soon as the filter stops matching.
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java Wed Jul 1 08:18:26 2009
@@ -143,6 +143,7 @@
addToMap(PageFilter.class, code++);
addToMap(InclusiveStopFilter.class, code++);
addToMap(ColumnCountGetFilter.class, code++);
+ addToMap(ValueFilter.class, code++);
}
private Class<?> declaredClass;
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseClusterTestCase.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseClusterTestCase.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseClusterTestCase.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseClusterTestCase.java Wed Jul 1 08:18:26 2009
@@ -25,12 +25,12 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.dfs.MiniDFSCluster;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.util.FSUtils;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.util.ReflectionUtils;
/**
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseTestCase.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseTestCase.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseTestCase.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/HBaseTestCase.java Wed Jul 1 08:18:26 2009
@@ -33,6 +33,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.dfs.MiniDFSCluster;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.client.Delete;
@@ -48,7 +49,6 @@
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.InternalScanner;
import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
/**
* Abstract base class for test cases. Performs all static initialization
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/PerformanceEvaluation.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/PerformanceEvaluation.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/PerformanceEvaluation.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/PerformanceEvaluation.java Wed Jul 1 08:18:26 2009
@@ -45,7 +45,7 @@
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.filter.PageFilter;
-import org.apache.hadoop.hbase.filter.RowWhileMatchFilter;
+import org.apache.hadoop.hbase.filter.WhileMatchFilter;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.FSUtils;
import org.apache.hadoop.hbase.util.Hash;
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/TimestampTestBase.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/TimestampTestBase.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/TimestampTestBase.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/TimestampTestBase.java Wed Jul 1 08:18:26 2009
@@ -39,9 +39,11 @@
private static final long T1 = 100L;
private static final long T2 = 200L;
- private static final String COLUMN_NAME = "contents:contents";
+ private static final String COLUMN_NAME = "colfamily1:contents";
private static final byte [] COLUMN = Bytes.toBytes(COLUMN_NAME);
+ private static final byte [][] COLUMNS =
+ new byte [][] {Bytes.toBytes("colfamily1")};
private static final byte [] ROW = Bytes.toBytes("row");
/*
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestOldAPITimestamp.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestOldAPITimestamp.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestOldAPITimestamp.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestOldAPITimestamp.java Wed Jul 1 08:18:26 2009
@@ -31,7 +31,7 @@
* run against an HRegion and against an HTable: i.e. both local and remote.
*/
public class TestOldAPITimestamp extends HBaseClusterTestCase {
- public static String COLUMN_NAME = "contents:";
+ public static String COLUMN_NAME = "colfamily1:";
/**
* Basic test of timestamps.
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestTimestamp.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestTimestamp.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestTimestamp.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/client/TestTimestamp.java Wed Jul 1 08:18:26 2009
@@ -31,7 +31,7 @@
* run against an HRegion and against an HTable: i.e. both local and remote.
*/
public class TestTimestamp extends HBaseClusterTestCase {
- public static String COLUMN_NAME = "contents";
+ public static String COLUMN_NAME = "colfamily1";
/** constructor */
public TestTimestamp() {
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestFilterSet.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestFilterSet.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestFilterSet.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestFilterSet.java Wed Jul 1 08:18:26 2009
@@ -27,6 +27,7 @@
import java.util.Set;
import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.KeyValue;
import junit.framework.TestCase;
@@ -67,8 +68,26 @@
filterMPONE.reset();
assertFalse(filterMPONE.filterAllRemaining());
byte [] rowkey = Bytes.toBytes("yyyyyyyyy");
+ for (int i = 0; i < MAX_PAGES; i++) {
+ assertFalse(filterMPONE.filterRowKey(rowkey, 0, rowkey.length));
+ KeyValue kv = new KeyValue(rowkey, rowkey, Bytes.toBytes(i),
+ Bytes.toBytes(i));
+ assertTrue(Filter.ReturnCode.INCLUDE == filterMPONE.filterKeyValue(kv));
+ }
+ rowkey = Bytes.toBytes("z");
+ for (int i = 0; i < MAX_PAGES - 1; i++) {
+ assertFalse(filterMPONE.filterRowKey(rowkey, 0, rowkey.length));
+ KeyValue kv = new KeyValue(rowkey, rowkey, Bytes.toBytes(i),
+ Bytes.toBytes(i));
+ assertTrue(Filter.ReturnCode.INCLUDE == filterMPONE.filterKeyValue(kv));
+ }
assertFalse(filterMPONE.filterRowKey(rowkey, 0, rowkey.length));
-
+ // Should fail here
+ KeyValue kv = new KeyValue(rowkey, rowkey, rowkey, rowkey);
+ assertTrue(Filter.ReturnCode.SKIP == filterMPONE.filterKeyValue(kv));
+
+ // Both filters in Set should be satisfied by now
+ assertTrue(filterMPONE.filterRow());
}
/**
@@ -81,6 +100,36 @@
filters.add(new WhileMatchFilter(new PrefixFilter(Bytes.toBytes("yyy"))));
Filter filterMPALL =
new FilterSet(FilterSet.Operator.MUST_PASS_ALL, filters);
+ /* Filter must do all below steps:
+ * <ul>
+ * <li>{@link #reset()}</li>
+ * <li>{@link #filterAllRemaining()} -> true indicates scan is over, false, keep going on.</li>
+ * <li>{@link #filterRowKey(byte[],int,int)} -> true to drop this row,
+ * if false, we will also call</li>
+ * <li>{@link #filterKeyValue(org.apache.hadoop.hbase.KeyValue)} -> true to drop this key/value</li>
+ * <li>{@link #filterRow()} -> last chance to drop entire row based on the sequence of
+ * filterValue() calls. Eg: filter a row if it doesn't contain a specified column.
+ * </li>
+ * </ul>
+ */
+ filterMPALL.reset();
+ assertFalse(filterMPALL.filterAllRemaining());
+ byte [] rowkey = Bytes.toBytes("yyyyyyyyy");
+ for (int i = 0; i < MAX_PAGES - 1; i++) {
+ assertFalse(filterMPALL.filterRowKey(rowkey, 0, rowkey.length));
+ KeyValue kv = new KeyValue(rowkey, rowkey, Bytes.toBytes(i),
+ Bytes.toBytes(i));
+ assertTrue(Filter.ReturnCode.INCLUDE == filterMPALL.filterKeyValue(kv));
+ }
+ filterMPALL.reset();
+ rowkey = Bytes.toBytes("z");
+ assertTrue(filterMPALL.filterRowKey(rowkey, 0, rowkey.length));
+ // Should fail here; row should be filtered out.
+ KeyValue kv = new KeyValue(rowkey, rowkey, rowkey, rowkey);
+ assertTrue(Filter.ReturnCode.NEXT_ROW == filterMPALL.filterKeyValue(kv));
+
+ // Both filters in Set should be satisfied by now
+ assertTrue(filterMPALL.filterRow());
}
/**
Added: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestInclusiveStopFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestInclusiveStopFilter.java?rev=790059&view=auto
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestInclusiveStopFilter.java (added)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestInclusiveStopFilter.java Wed Jul 1 08:18:26 2009
@@ -0,0 +1,91 @@
+/**
+ * Copyright 2007 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.filter;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.util.List;
+
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.util.Bytes;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the inclusive stop row filter
+ */
+public class TestInclusiveStopFilter extends TestCase {
+ private final byte [] STOP_ROW = Bytes.toBytes("stop_row");
+ private final byte [] GOOD_ROW = Bytes.toBytes("good_row");
+ private final byte [] PAST_STOP_ROW = Bytes.toBytes("zzzzzz");
+
+ Filter mainFilter;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mainFilter = new InclusiveStopFilter(STOP_ROW);
+ }
+
+ /**
+ * Tests identification of the stop row
+ * @throws Exception
+ */
+ public void testStopRowIdentification() throws Exception {
+ stopRowTests(mainFilter);
+ }
+
+ /**
+ * Tests serialization
+ * @throws Exception
+ */
+ public void testSerialization() throws Exception {
+ // Decompose mainFilter to bytes.
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(stream);
+ mainFilter.write(out);
+ out.close();
+ byte[] buffer = stream.toByteArray();
+
+ // Recompose mainFilter.
+ DataInputStream in = new DataInputStream(new ByteArrayInputStream(buffer));
+ Filter newFilter = new InclusiveStopFilter();
+ newFilter.readFields(in);
+
+ // Ensure the serialization preserved the filter by running a full test.
+ stopRowTests(newFilter);
+ }
+
+ private void stopRowTests(Filter filter) throws Exception {
+ assertFalse("Filtering on " + Bytes.toString(GOOD_ROW),
+ filter.filterRowKey(GOOD_ROW, 0, GOOD_ROW.length));
+ assertFalse("Filtering on " + Bytes.toString(STOP_ROW),
+ filter.filterRowKey(STOP_ROW, 0, STOP_ROW.length));
+ assertTrue("Filtering on " + Bytes.toString(PAST_STOP_ROW),
+ filter.filterRowKey(PAST_STOP_ROW, 0, PAST_STOP_ROW.length));
+
+ assertFalse("FilterAllRemaining", filter.filterAllRemaining());
+ assertFalse("FilterNotNull", filter.filterRow());
+
+ assertFalse("Filter a null", filter.filterRowKey(null, 0, 0));
+ }
+}
\ No newline at end of file
Added: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestValueFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestValueFilter.java?rev=790059&view=auto
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestValueFilter.java (added)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/filter/TestValueFilter.java Wed Jul 1 08:18:26 2009
@@ -0,0 +1,160 @@
+/**
+ * Copyright 2007 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.filter;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.util.List;
+
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.util.Bytes;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the value filter
+ */
+public class TestValueFilter extends TestCase {
+ private static final byte[] ROW = Bytes.toBytes("test");
+ private static final byte[] COLUMN_FAMILY = Bytes.toBytes("test");
+ private static final byte [] COLUMN_QUALIFIER = Bytes.toBytes("foo");
+ private static final byte[] VAL_1 = Bytes.toBytes("a");
+ private static final byte[] VAL_2 = Bytes.toBytes("ab");
+ private static final byte[] VAL_3 = Bytes.toBytes("abc");
+ private static final byte[] VAL_4 = Bytes.toBytes("abcd");
+ private static final byte[] FULLSTRING_1 =
+ Bytes.toBytes("The quick brown fox jumps over the lazy dog.");
+ private static final byte[] FULLSTRING_2 =
+ Bytes.toBytes("The slow grey fox trips over the lazy dog.");
+ private static final String QUICK_SUBSTR = "quick";
+ private static final String QUICK_REGEX = ".+quick.+";
+
+ Filter basicFilter;
+ Filter substrFilter;
+ Filter regexFilter;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ basicFilter = basicFilterNew();
+ substrFilter = substrFilterNew();
+ regexFilter = regexFilterNew();
+ }
+
+ private Filter basicFilterNew() {
+ return new ValueFilter(COLUMN_FAMILY, COLUMN_QUALIFIER,
+ ValueFilter.CompareOp.GREATER_OR_EQUAL, VAL_2);
+ }
+
+ private Filter substrFilterNew() {
+ return new ValueFilter(COLUMN_FAMILY, COLUMN_QUALIFIER,
+ ValueFilter.CompareOp.EQUAL,
+ new SubstringComparator(QUICK_SUBSTR));
+ }
+
+ private Filter regexFilterNew() {
+ return new ValueFilter(COLUMN_FAMILY, COLUMN_QUALIFIER,
+ ValueFilter.CompareOp.EQUAL,
+ new RegexStringComparator(QUICK_REGEX));
+ }
+
+ private void basicFilterTests(Filter filter)
+ throws Exception {
+ KeyValue kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, VAL_1);
+ assertFalse("basicFilter1", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, VAL_2);
+ assertTrue("basicFilter2", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, VAL_3);
+ assertTrue("basicFilter3", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, VAL_4);
+ assertTrue("basicFilter4", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ assertFalse("basicFilterAllRemaining", filter.filterAllRemaining());
+ assertTrue("basicFilterNotNull", filter.filterRow());
+ }
+
+ private void substrFilterTests(Filter filter)
+ throws Exception {
+ KeyValue kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER,
+ FULLSTRING_1);
+ assertTrue("substrTrue",
+ filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER,
+ FULLSTRING_2);
+ assertFalse("substrFalse", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ assertFalse("substrFilterAllRemaining", filter.filterAllRemaining());
+ assertTrue("substrFilterNotNull", filter.filterRow());
+ }
+
+ private void regexFilterTests(Filter filter)
+ throws Exception {
+ KeyValue kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER,
+ FULLSTRING_1);
+ assertTrue("regexTrue",
+ filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ kv = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER,
+ FULLSTRING_2);
+ assertFalse("regexFalse", filter.filterKeyValue(kv) == Filter.ReturnCode.INCLUDE);
+ assertFalse("regexFilterAllRemaining", filter.filterAllRemaining());
+ assertTrue("regexFilterNotNull", filter.filterRow());
+ }
+
+ private Filter serializationTest(Filter filter)
+ throws Exception {
+ // Decompose filter to bytes.
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(stream);
+ filter.write(out);
+ out.close();
+ byte[] buffer = stream.toByteArray();
+
+ // Recompose filter.
+ DataInputStream in =
+ new DataInputStream(new ByteArrayInputStream(buffer));
+ Filter newFilter = new ValueFilter();
+ newFilter.readFields(in);
+
+ return newFilter;
+ }
+
+ /**
+ * Tests identification of the stop row
+ * @throws Exception
+ */
+ public void testStop() throws Exception {
+ basicFilterTests(basicFilter);
+ substrFilterTests(substrFilter);
+ regexFilterTests(regexFilter);
+ }
+
+ /**
+ * Tests serialization
+ * @throws Exception
+ */
+ public void testSerialization() throws Exception {
+ Filter newFilter = serializationTest(basicFilter);
+ basicFilterTests(newFilter);
+ newFilter = serializationTest(substrFilter);
+ substrFilterTests(newFilter);
+ newFilter = serializationTest(regexFilter);
+ regexFilterTests(newFilter);
+ }
+}
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java Wed Jul 1 08:18:26 2009
@@ -1480,21 +1480,19 @@
*/
public void testScanSplitOnRegion() throws Exception {
byte [] tableName = Bytes.toBytes("testtable");
- byte [][] families = {fam3};
HBaseConfiguration hc = initSplit();
//Setting up region
String method = this.getName();
- initHRegion(tableName, method, hc, families);
+ initHRegion(tableName, method, hc, new byte [][] {fam3});
try {
addContent(region, fam3);
region.flushcache();
final byte [] midkey = region.compactStores();
assertNotNull(midkey);
- byte [][] cols = {fam3};
Scan scan = new Scan();
- scan.addColumns(cols);
+ scan.addFamily(fam3);
final InternalScanner s = region.getScanner(scan);
final HRegion regionForThread = region;
@@ -1544,16 +1542,16 @@
/*
* Assert first value in the passed region is <code>firstValue</code>.
* @param r
- * @param column
+ * @param fs
* @param firstValue
* @throws IOException
*/
- private void assertScan(final HRegion r, final byte [] column,
+ private void assertScan(final HRegion r, final byte [] fs,
final byte [] firstValue)
throws IOException {
- byte [][] cols = {column};
+ byte [][] families = {fs};
Scan scan = new Scan();
- scan.addColumns(cols);
+ for (int i = 0; i < families.length; i++) scan.addFamily(families[i]);
InternalScanner s = r.getScanner(scan);
try {
List<KeyValue> curVals = new ArrayList<KeyValue>();
Modified: hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestScanner.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestScanner.java?rev=790059&r1=790058&r2=790059&view=diff
==============================================================================
--- hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestScanner.java (original)
+++ hadoop/hbase/trunk_on_hadoop-0.18.3/src/test/org/apache/hadoop/hbase/regionserver/TestScanner.java Wed Jul 1 08:18:26 2009
@@ -285,7 +285,9 @@
for(int i = 0; i < scanColumns.length; i++) {
try {
scan = new Scan(FIRST_ROW);
- scan.addColumns(scanColumns[i]);
+ for (int ii = 0; ii < EXPLICIT_COLS.length; ii++) {
+ scan.addColumn(COLS[0], EXPLICIT_COLS[ii]);
+ }
scanner = r.getScanner(scan);
while (scanner.next(results)) {
assertTrue(hasColumn(results, HConstants.CATALOG_FAMILY,
@@ -316,7 +318,6 @@
}
results.clear();
}
-
} finally {
InternalScanner s = scanner;
scanner = null;