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();
+    }
+  }
+
 }

Reply via email to