From 2eeb483a26a3ab5b30edd50bc483d50141150185 Mon Sep 17 00:00:00 2001 From: cuijianwei Date: Sun, 10 Apr 2016 15:14:47 +0800 Subject: [PATCH] CheckAndMutate will encouter NPE if qualifier to check is null --- .../hadoop/hbase/protobuf/RequestConverter.java | 3 ++- .../hadoop/hbase/client/TestFromClientSide.java | 21 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java index 99e993d..bc804b1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java @@ -1014,7 +1014,8 @@ public final class RequestConverter { Condition.Builder builder = Condition.newBuilder(); builder.setRow(ByteStringer.wrap(row)); builder.setFamily(ByteStringer.wrap(family)); - builder.setQualifier(ByteStringer.wrap(qualifier)); + builder.setQualifier(ByteStringer.wrap(qualifier == null ? HConstants.EMPTY_BYTE_ARRAY + : qualifier)); builder.setComparator(ProtobufUtil.toComparator(comparator)); builder.setCompareType(compareType); return builder.build(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java index 520f210..1f33832 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java @@ -4700,6 +4700,27 @@ public class TestFromClientSide { assertEquals(ok, true); } + @Test + public void testCheckAndMutateWithNullQualifier() throws IOException { + Table table = TEST_UTIL.createTable(TableName.valueOf("testCheckAndMutateWithNullQualifier"), + FAMILY); + final byte[] value = Bytes.toBytes("aaaa"); + Put put = new Put(ROW); + put.addColumn(FAMILY, null, value); + Delete delete = new Delete(ROW); + delete.addColumn(FAMILY, null); + + // make sure null qualifier is allowed + table.checkAndPut(ROW, FAMILY, null, value, put); + table.checkAndPut(ROW, FAMILY, null, CompareOp.EQUAL, value, put); + table.checkAndDelete(ROW, FAMILY, null, value, delete); + table.checkAndDelete(ROW, FAMILY, null, CompareOp.EQUAL, value, delete); + RowMutations mutations = new RowMutations(ROW); + mutations.add(put); + mutations.add(delete); + table.checkAndMutate(ROW, FAMILY, null, CompareOp.EQUAL, value, mutations); + } + /** * Test ScanMetrics * @throws Exception -- 1.7.9.5