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


Reply via email to