Repository: hbase Updated Branches: refs/heads/0.98 1ed735458 -> ccf3108ac
HBASE-17096 checkAndMutateApi doesn't work correctly on 0.98.19+ Signed-off-by: Andrew Purtell <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ccf3108a Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ccf3108a Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ccf3108a Branch: refs/heads/0.98 Commit: ccf3108ac15c62164dbf10e03d07e298fd402008 Parents: 1ed7354 Author: daoye.ch <[email protected]> Authored: Tue Nov 15 21:54:26 2016 +0800 Committer: Andrew Purtell <[email protected]> Committed: Tue Nov 15 09:37:58 2016 -0800 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/client/HTable.java | 9 ++---- .../hbase/client/TestFromClientSide3.java | 31 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/ccf3108a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java index ada451c..7b44a0a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java @@ -1319,13 +1319,10 @@ public class HTable implements HTableInterface { } RpcClient.setRpcTimeout(timeout); try { - RegionAction.Builder regionMutationBuilder = RequestConverter.buildRegionAction( - getLocation().getRegionInfo().getRegionName(), rm); - regionMutationBuilder.setAtomic(true); - MultiRequest request = - MultiRequest.newBuilder().addRegionAction(regionMutationBuilder.build()).build(); + MultiRequest request = RequestConverter.buildMutateRequest( + getLocation().getRegionInfo().getRegionName(), row, family, qualifier, + new BinaryComparator(value), CompareType.EQUAL, rm); ClientProtos.MultiResponse response = getStub().multi(controller, request); - response.getRegionActionResult(0).getResultOrException(0).getResult(); ClientProtos.RegionActionResult res = response.getRegionActionResultList().get(0); if (res.hasException()) { Throwable ex = ProtobufUtil.toException(res.getException()); http://git-wip-us.apache.org/repos/asf/hbase/blob/ccf3108a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java index ca3ae8d..0308242 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java @@ -33,6 +33,7 @@ import java.util.Random; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HRegionLocation; @@ -490,4 +491,34 @@ public class TestFromClientSide3 { table.close(); } } + + @Test + public void testCheckAndMutateApi() throws Exception { + byte[] row = Bytes.toBytes("ROW"); + byte[] tableNameBytes = Bytes.toBytes("testCheckAndMutateApi"); + byte[] family = FAMILY; + byte[] qualifier = Bytes.toBytes("QUALIFIER"); + byte[] oldValue = null; + byte[] newValue = Bytes.toBytes("VALUE"); + Put put = new Put(row); + put.add(family, qualifier, newValue); + HBaseAdmin admin = TEST_UTIL.getHBaseAdmin(); + HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableNameBytes)); + HColumnDescriptor columnDesc = new HColumnDescriptor(family); + columnDesc.setTimeToLive(120); + tableDesc.addFamily(columnDesc); + admin.createTable(tableDesc); + HTable table = new HTable(TEST_UTIL.getConfiguration(), tableNameBytes); + try { + assertTrue(table.checkAndPut(row, family, qualifier, oldValue, put)); + Delete delete = new Delete(row); + RowMutations mutations = new RowMutations(row); + mutations.add(delete); + assertTrue(table.checkAndMutate(row, family, qualifier, CompareOp.EQUAL, newValue, mutations)); + assertFalse(table.checkAndMutate(row, family, qualifier, CompareOp.EQUAL, newValue, mutations)); + } finally { + table.close(); + } + } + }
