Author: tedyu
Date: Wed Feb 8 16:54:19 2012
New Revision: 1241971
URL: http://svn.apache.org/viewvc?rev=1241971&view=rev
Log:
HBASE-5345 CheckAndPut doesn't work when value is empty byte[] (Evert Arckens)
Modified:
hbase/branches/0.92/CHANGES.txt
hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
Modified: hbase/branches/0.92/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hbase/branches/0.92/CHANGES.txt?rev=1241971&r1=1241970&r2=1241971&view=diff
==============================================================================
--- hbase/branches/0.92/CHANGES.txt (original)
+++ hbase/branches/0.92/CHANGES.txt Wed Feb 8 16:54:19 2012
@@ -14,6 +14,7 @@ Release 0.92.1 - Unreleased
(YiFeng Jiang)
HBASE-5212 Fix test TestTableMapReduce against 0.23 (Ted and Gregory)
HBASE-5267 Add a configuration to disable the slab cache by default (Li Pi)
+ HBASE-5345 CheckAndPut doesn't work when value is empty byte[] (Evert
Arckens)
TESTS
HBASE-5223 TestMetaReaderEditor is missing call to CatalogTracker.stop()
Modified:
hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=1241971&r1=1241970&r2=1241971&view=diff
==============================================================================
---
hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
(original)
+++
hbase/branches/0.92/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
Wed Feb 8 16:54:19 2012
@@ -80,6 +80,7 @@ import org.apache.hadoop.hbase.client.co
import org.apache.hadoop.hbase.client.coprocessor.ExecResult;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.IncompatibleFilterException;
+import org.apache.hadoop.hbase.filter.NullComparator;
import org.apache.hadoop.hbase.filter.WritableByteArrayComparable;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.io.HeapSize;
@@ -1951,6 +1952,9 @@ public class HRegion implements HeapSize
boolean matches = false;
if (result.size() == 0 && valueIsNull) {
matches = true;
+ } else if (result.size() > 0 && result.get(0).getValue().length == 0 &&
+ valueIsNull) {
+ matches = true;
} else if (result.size() == 1 && !valueIsNull) {
int compareResult = comparator.compareTo(result.get(0).getValue());
switch (compareOp) {
Modified:
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java?rev=1241971&r1=1241970&r2=1241971&view=diff
==============================================================================
---
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
(original)
+++
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
Wed Feb 8 16:54:19 2012
@@ -581,12 +581,22 @@ public class TestHRegion extends HBaseTe
//Setting up region
String method = this.getName();
initHRegion(tableName, method, fam1);
- //Putting data in key
+
+ //Putting empty data in key
Put put = new Put(row1);
+ put.add(fam1, qf1, emptyVal);
+
+ //checkAndPut with empty value
+ boolean res = region.checkAndMutate(row1, fam1, qf1, CompareOp.EQUAL,
+ new BinaryComparator(emptyVal), put, lockId, true);
+ assertTrue(res);
+
+ //Putting data in key
+ put = new Put(row1);
put.add(fam1, qf1, val1);
//checkAndPut with correct value
- boolean res = region.checkAndMutate(row1, fam1, qf1, CompareOp.EQUAL,
+ res = region.checkAndMutate(row1, fam1, qf1, CompareOp.EQUAL,
new BinaryComparator(emptyVal), put, lockId, true);
assertTrue(res);