Hochul Shin created HBASE-25797: ----------------------------------- Summary: Batch version of checkAndMutate on AsyncTable always returns false Key: HBASE-25797 URL: https://issues.apache.org/jira/browse/HBASE-25797 Project: HBase Issue Type: Bug Components: Client Affects Versions: 2.4.1 Reporter: Hochul Shin
Batch version of CheckAndMutate always returns false whereas non-batch version works fine. The code is like: ``` AysncTable<?> table = connection.getTable(tableName, executorService); ... // add r1 table.put(Arrays.asList( new Put(Bytes.toBytes("r1")).addColumn(COL_FAMILY, Bytes.toBytes("q1"), Bytes.toBytes("v1")))); CheckAndMutate checkAndMutate1 = CheckAndMutate.newBuilder(Bytes.toBytes("r1")) .ifNotExists(COL_FAMILY, Bytes.toBytes("q1")) .build(new Put(Bytes.toBytes("r1")).addColumn(COL_FAMILY, Bytes.toBytes("q1"), Bytes.toBytes("v1"))); CheckAndMutate checkAndMutate2 = CheckAndMutate.newBuilder(Bytes.toBytes("r2")) .ifNotExists(COL_FAMILY, Bytes.toBytes("q2")) .build(new Put(Bytes.toBytes("r2")).addColumn(COL_FAMILY, Bytes.toBytes("q2"), Bytes.toBytes("v2"))); ``` With batch version of checkAndMutate ``` List<CompletableFuture<CheckAndMutateResult>> results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); System.out.println("first: " + results.get(0).join().isSuccess()); // false System.out.println("second: " + results.get(1).join().isSuccess()); //false! ``` Even it returned false, the item was written to the table. With non-batch version of checkAndMutate ``` CompletableFuture<CheckAndMutateResult> result1 = table.checkAndMutate(checkAndMutate1); CompletableFuture<CheckAndMutateResult> result2 = table.checkAndMutate(checkAndMutate2); System.out.println("first: " + result1.join().isSuccess()); // false System.out.println("second: " + result2.join().isSuccess()); // true as expected ``` As expected r1 wasn't written to the table. -- This message was sent by Atlassian Jira (v8.3.4#803005)