Index: src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java (revision 989204) +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java (working copy) @@ -489,6 +489,14 @@ res = region.checkAndMutate(row1, fam1, qf1, emptyVal, delete, lockId, true); assertTrue(res); + + //checkAndPut looking for a null value + put = new Put(row1); + put.add(fam1, qf1, val1); + + res = region.checkAndMutate(row1, fam1, qf1, null, put, lockId, true); + assertTrue(res); + } public void testCheckAndMutate_WithWrongValue() throws IOException{ Index: src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (revision 989204) +++ src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (working copy) @@ -1473,7 +1473,8 @@ result = get(get); boolean matches = false; - if (result.size() == 0 && expectedValue.length == 0) { + if (result.size() == 0 && + (expectedValue == null || expectedValue.length == 0)) { matches = true; } else if (result.size() == 1) { //Compare the expected value with the actual value