This is an automated email from the ASF dual-hosted git repository. brfrn169 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push: new 34e807a HBASE-24650 Change the return types of the new CheckAndMutate methods introduced in HBASE-8458 (#1991) 34e807a is described below commit 34e807a8b51400d170ef1e876f6221df95fab30a Author: Toshihiro Suzuki <brfrn...@gmail.com> AuthorDate: Tue Jul 7 12:49:20 2020 +0900 HBASE-24650 Change the return types of the new CheckAndMutate methods introduced in HBASE-8458 (#1991) Signed-off-by: Duo Zhang <zhang...@apache.org> --- .../org/apache/hadoop/hbase/client/AsyncTable.java | 9 +- .../apache/hadoop/hbase/client/AsyncTableImpl.java | 5 +- .../hadoop/hbase/client/CheckAndMutateResult.java | 48 +++++++ .../hadoop/hbase/client/RawAsyncTableImpl.java | 53 +++---- .../java/org/apache/hadoop/hbase/client/Table.java | 12 +- .../hadoop/hbase/client/TableOverAsyncTable.java | 7 +- .../hbase/shaded/protobuf/ResponseConverter.java | 75 +++++++--- .../hadoop/hbase/rest/client/RemoteHTable.java | 5 +- .../hadoop/hbase/client/DummyAsyncTable.java | 5 +- .../apache/hadoop/hbase/client/TestAsyncTable.java | 154 ++++++++++----------- .../hadoop/hbase/client/TestAsyncTableBatch.java | 4 +- .../hadoop/hbase/client/TestCheckAndMutate.java | 129 ++++++++--------- .../hadoop/hbase/client/TestFromClientSide3.java | 4 +- .../hadoop/hbase/thrift2/client/ThriftTable.java | 5 +- 14 files changed, 311 insertions(+), 204 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java index b2bb2f7..aae4fc7 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java @@ -367,7 +367,7 @@ public interface AsyncTable<C extends ScanResultConsumerBase> { * @param checkAndMutate The CheckAndMutate object. * @return A {@link CompletableFuture}s that represent the result for the CheckAndMutate. */ - CompletableFuture<Boolean> checkAndMutate(CheckAndMutate checkAndMutate); + CompletableFuture<CheckAndMutateResult> checkAndMutate(CheckAndMutate checkAndMutate); /** * Batch version of checkAndMutate. The specified CheckAndMutates are batched only in the sense @@ -378,15 +378,16 @@ public interface AsyncTable<C extends ScanResultConsumerBase> { * @return A list of {@link CompletableFuture}s that represent the result for each * CheckAndMutate. */ - List<CompletableFuture<Boolean>> checkAndMutate(List<CheckAndMutate> checkAndMutates); + List<CompletableFuture<CheckAndMutateResult>> checkAndMutate( + List<CheckAndMutate> checkAndMutates); /** * A simple version of batch checkAndMutate. It will fail if there are any failures. * * @param checkAndMutates The list of rows to apply. - * @return A {@link CompletableFuture} that wrapper the result boolean list. + * @return A {@link CompletableFuture} that wrapper the result list. */ - default CompletableFuture<List<Boolean>> checkAndMutateAll( + default CompletableFuture<List<CheckAndMutateResult>> checkAndMutateAll( List<CheckAndMutate> checkAndMutates) { return allOf(checkAndMutate(checkAndMutates)); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java index 53a020e..f931d67 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java @@ -206,12 +206,13 @@ class AsyncTableImpl implements AsyncTable<ScanResultConsumer> { } @Override - public CompletableFuture<Boolean> checkAndMutate(CheckAndMutate checkAndMutate) { + public CompletableFuture<CheckAndMutateResult> checkAndMutate(CheckAndMutate checkAndMutate) { return wrap(rawTable.checkAndMutate(checkAndMutate)); } @Override - public List<CompletableFuture<Boolean>> checkAndMutate(List<CheckAndMutate> checkAndMutates) { + public List<CompletableFuture<CheckAndMutateResult>> checkAndMutate( + List<CheckAndMutate> checkAndMutates) { return rawTable.checkAndMutate(checkAndMutates).stream() .map(this::wrap).collect(toList()); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/CheckAndMutateResult.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/CheckAndMutateResult.java new file mode 100644 index 0000000..88b438a --- /dev/null +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/CheckAndMutateResult.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.client; + +import org.apache.yetus.audience.InterfaceAudience; + +/** + * Represents a result of a CheckAndMutate operation + */ +@InterfaceAudience.Public +public class CheckAndMutateResult { + private final boolean success; + private final Result result; + + public CheckAndMutateResult(boolean success, Result result) { + this.success = success; + this.result = result; + } + + /** + * @return Whether the CheckAndMutate operation is successful or not + */ + public boolean isSuccess() { + return success; + } + + /** + * @return It is used only for CheckAndMutate operations with Increment/Append. Otherwise null + */ + public Result getResult() { + return result; + } +} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java index fa5f7cf..4bcb1df 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java @@ -348,8 +348,7 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { .action((controller, loc, stub) -> RawAsyncTableImpl.this.mutateRow(controller, loc, stub, mutation, (rn, rm) -> RequestConverter.buildMutateRequest(rn, row, family, qualifier, op, value, - null, timeRange, rm), - resp -> resp.getExists())) + null, timeRange, rm), CheckAndMutateResult::isSuccess)) .call(); } } @@ -409,8 +408,7 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { .action((controller, loc, stub) -> RawAsyncTableImpl.this.mutateRow(controller, loc, stub, mutation, (rn, rm) -> RequestConverter.buildMutateRequest(rn, row, null, null, null, null, - filter, timeRange, rm), - resp -> resp.getExists())) + filter, timeRange, rm), CheckAndMutateResult::isSuccess)) .call(); } } @@ -421,7 +419,7 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { } @Override - public CompletableFuture<Boolean> checkAndMutate(CheckAndMutate checkAndMutate) { + public CompletableFuture<CheckAndMutateResult> checkAndMutate(CheckAndMutate checkAndMutate) { if (checkAndMutate.getAction() instanceof Put) { validatePut((Put) checkAndMutate.getAction(), conn.connConf.getMaxKeyValueSize()); } @@ -431,7 +429,7 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { if (mutation instanceof Put) { validatePut((Put) mutation, conn.connConf.getMaxKeyValueSize()); } - return RawAsyncTableImpl.this.<Boolean> newCaller(checkAndMutate.getRow(), + return RawAsyncTableImpl.this.<CheckAndMutateResult> newCaller(checkAndMutate.getRow(), mutation.getPriority(), rpcTimeoutNs) .action((controller, loc, stub) -> RawAsyncTableImpl.mutate(controller, loc, stub, mutation, @@ -439,22 +437,23 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { checkAndMutate.getFamily(), checkAndMutate.getQualifier(), checkAndMutate.getCompareOp(), checkAndMutate.getValue(), checkAndMutate.getFilter(), checkAndMutate.getTimeRange(), m), - (c, r) -> r.getProcessed())) + (c, r) -> ResponseConverter.getCheckAndMutateResult(r))) .call(); } else if (checkAndMutate.getAction() instanceof RowMutations) { RowMutations rowMutations = (RowMutations) checkAndMutate.getAction(); - return RawAsyncTableImpl.this.<Boolean> newCaller(checkAndMutate.getRow(), + return RawAsyncTableImpl.this.<CheckAndMutateResult> newCaller(checkAndMutate.getRow(), rowMutations.getMaxPriority(), rpcTimeoutNs) - .action((controller, loc, stub) -> RawAsyncTableImpl.this.mutateRow(controller, - loc, stub, rowMutations, - (rn, rm) -> RequestConverter.buildMutateRequest(rn, checkAndMutate.getRow(), + .action((controller, loc, stub) -> + RawAsyncTableImpl.this.<CheckAndMutateResult, CheckAndMutateResult> mutateRow( + controller, loc, stub, rowMutations, + (rn, rm) -> RequestConverter.buildMutateRequest(rn, checkAndMutate.getRow(), checkAndMutate.getFamily(), checkAndMutate.getQualifier(), checkAndMutate.getCompareOp(), checkAndMutate.getValue(), checkAndMutate.getFilter(), checkAndMutate.getTimeRange(), rm), - resp -> resp.getExists())) + resp -> resp)) .call(); } else { - CompletableFuture<Boolean> future = new CompletableFuture<>(); + CompletableFuture<CheckAndMutateResult> future = new CompletableFuture<>(); future.completeExceptionally(new DoNotRetryIOException( "CheckAndMutate doesn't support " + checkAndMutate.getAction().getClass().getName())); return future; @@ -462,18 +461,19 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { } @Override - public List<CompletableFuture<Boolean>> checkAndMutate(List<CheckAndMutate> checkAndMutates) { + public List<CompletableFuture<CheckAndMutateResult>> checkAndMutate( + List<CheckAndMutate> checkAndMutates) { return batch(checkAndMutates, rpcTimeoutNs).stream() - .map(f -> f.thenApply(r -> ((Result)r).getExists())) - .collect(toList()); + .map(f -> f.thenApply(r -> (CheckAndMutateResult) r)).collect(toList()); } // We need the MultiRequest when constructing the org.apache.hadoop.hbase.client.MultiResponse, // so here I write a new method as I do not want to change the abstraction of call method. - private <RESP> CompletableFuture<RESP> mutateRow(HBaseRpcController controller, + @SuppressWarnings("unchecked") + private <RES, RESP> CompletableFuture<RESP> mutateRow(HBaseRpcController controller, HRegionLocation loc, ClientService.Interface stub, RowMutations mutation, Converter<MultiRequest, byte[], RowMutations> reqConvert, - Function<Result, RESP> respConverter) { + Function<RES, RESP> respConverter) { CompletableFuture<RESP> future = new CompletableFuture<>(); try { byte[] regionName = loc.getRegion().getRegionName(); @@ -497,7 +497,7 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { "Failed to mutate row: " + Bytes.toStringBinary(mutation.getRow()), ex)); } else { future.complete(respConverter - .apply((Result) multiResp.getResults().get(regionName).result.get(0))); + .apply((RES) multiResp.getResults().get(regionName).result.get(0))); } } catch (IOException e) { future.completeExceptionally(e); @@ -514,12 +514,15 @@ class RawAsyncTableImpl implements AsyncTable<AdvancedScanResultConsumer> { @Override public CompletableFuture<Void> mutateRow(RowMutations mutation) { return this.<Void> newCaller(mutation.getRow(), mutation.getMaxPriority(), writeRpcTimeoutNs) - .action((controller, loc, stub) -> this.<Void> mutateRow(controller, loc, stub, mutation, - (rn, rm) -> { - RegionAction.Builder regionMutationBuilder = RequestConverter.buildRegionAction(rn, rm); - regionMutationBuilder.setAtomic(true); - return MultiRequest.newBuilder().addRegionAction(regionMutationBuilder.build()).build(); - }, resp -> null)) + .action((controller, loc, stub) -> + this.<Result, Void> mutateRow(controller, loc, stub, mutation, + (rn, rm) -> { + RegionAction.Builder regionMutationBuilder = RequestConverter + .buildRegionAction(rn, rm); + regionMutationBuilder.setAtomic(true); + return MultiRequest.newBuilder().addRegionAction(regionMutationBuilder.build()) + .build(); + }, resp -> null)) .call(); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java index bcd045f..eb98bc9 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java @@ -432,11 +432,11 @@ public interface Table extends Closeable { * it performs the specified action. * * @param checkAndMutate The CheckAndMutate object. - * @return boolean that represents the result for the CheckAndMutate. + * @return A CheckAndMutateResult object that represents the result for the CheckAndMutate. * @throws IOException if a remote or network exception occurs. */ - default boolean checkAndMutate(CheckAndMutate checkAndMutate) throws IOException { - return checkAndMutate(Collections.singletonList(checkAndMutate))[0]; + default CheckAndMutateResult checkAndMutate(CheckAndMutate checkAndMutate) throws IOException { + return checkAndMutate(Collections.singletonList(checkAndMutate)).get(0); } /** @@ -445,10 +445,12 @@ public interface Table extends Closeable { * atomically (and thus, each may fail independently of others). * * @param checkAndMutates The list of CheckAndMutate. - * @return A array of boolean that represents the result for each CheckAndMutate. + * @return A list of CheckAndMutateResult objects that represents the result for each + * CheckAndMutate. * @throws IOException if a remote or network exception occurs. */ - default boolean[] checkAndMutate(List<CheckAndMutate> checkAndMutates) throws IOException { + default List<CheckAndMutateResult> checkAndMutate(List<CheckAndMutate> checkAndMutates) + throws IOException { throw new NotImplementedException("Add an implementation!"); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableOverAsyncTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableOverAsyncTable.java index d33cbe1..8639282 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableOverAsyncTable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableOverAsyncTable.java @@ -300,13 +300,14 @@ class TableOverAsyncTable implements Table { } @Override - public boolean checkAndMutate(CheckAndMutate checkAndMutate) throws IOException { + public CheckAndMutateResult checkAndMutate(CheckAndMutate checkAndMutate) throws IOException { return FutureUtils.get(table.checkAndMutate(checkAndMutate)); } @Override - public boolean[] checkAndMutate(List<CheckAndMutate> checkAndMutates) throws IOException { - return Booleans.toArray(FutureUtils.get(table.checkAndMutateAll(checkAndMutates))); + public List<CheckAndMutateResult> checkAndMutate(List<CheckAndMutate> checkAndMutates) + throws IOException { + return FutureUtils.get(table.checkAndMutateAll(checkAndMutates)); } @Override diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.java index 19e6735..921f20b 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.java @@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellScanner; import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.CheckAndMutateResult; import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.SingleResponse; @@ -156,29 +157,56 @@ public final class ResponseConverter { // This RegionAction is from a RowMutations/CheckAndMutate in a batch. // If there is an exception from the server, the exception is set at // the RegionActionResult level, which has been handled above. - responseValue = actionResult.getProcessed() ? + if (actions.hasCondition()) { + Result result = null; + if (actionResult.getResultOrExceptionCount() > 0) { + ResultOrException roe = actionResult.getResultOrException(0); + if (roe.hasResult()) { + Result r = ProtobufUtil.toResult(roe.getResult(), cells); + if (!r.isEmpty()) { + result = r; + } + } + } + responseValue = new CheckAndMutateResult(actionResult.getProcessed(), result); + } else { + responseValue = actionResult.getProcessed() ? ProtobufUtil.EMPTY_RESULT_EXISTS_TRUE : ProtobufUtil.EMPTY_RESULT_EXISTS_FALSE; + } results.add(regionName, index, responseValue); continue; } - for (ResultOrException roe : actionResult.getResultOrExceptionList()) { - if (roe.hasException()) { - responseValue = ProtobufUtil.toException(roe.getException()); - } else if (roe.hasResult()) { - responseValue = ProtobufUtil.toResult(roe.getResult(), cells); - } else if (roe.hasServiceResult()) { - responseValue = roe.getServiceResult(); - } else { - // Sometimes, the response is just "it was processed". Generally, this occurs for things - // like mutateRows where either we get back 'processed' (or not) and optionally some - // statistics about the regions we touched. - responseValue = actionResult.getProcessed() ? - ProtobufUtil.EMPTY_RESULT_EXISTS_TRUE : - ProtobufUtil.EMPTY_RESULT_EXISTS_FALSE; + if (actions.hasCondition()) { + Result result = null; + if (actionResult.getResultOrExceptionCount() > 0) { + ResultOrException roe = actionResult.getResultOrException(0); + Result r = ProtobufUtil.toResult(roe.getResult(), cells); + if (!r.isEmpty()) { + result = r; + } + } + responseValue = new CheckAndMutateResult(actionResult.getProcessed(), result); + results.add(regionName, 0, responseValue); + } else { + for (ResultOrException roe : actionResult.getResultOrExceptionList()) { + if (roe.hasException()) { + responseValue = ProtobufUtil.toException(roe.getException()); + } else if (roe.hasResult()) { + responseValue = ProtobufUtil.toResult(roe.getResult(), cells); + } else if (roe.hasServiceResult()) { + responseValue = roe.getServiceResult(); + } else { + // Sometimes, the response is just "it was processed". Generally, this occurs for things + // like mutateRows where either we get back 'processed' (or not) and optionally some + // statistics about the regions we touched. + responseValue = actionResult.getProcessed() ? + ProtobufUtil.EMPTY_RESULT_EXISTS_TRUE : + ProtobufUtil.EMPTY_RESULT_EXISTS_FALSE; + } + results.add(regionName, roe.getIndex(), responseValue); } - results.add(regionName, roe.getIndex(), responseValue); } } @@ -193,6 +221,21 @@ public final class ResponseConverter { } /** + * Create a CheckAndMutateResult object from a protocol buffer MutateResponse + * + * @return a CheckAndMutateResult object + */ + public static CheckAndMutateResult getCheckAndMutateResult( + ClientProtos.MutateResponse mutateResponse) { + boolean success = mutateResponse.getProcessed(); + Result result = null; + if (mutateResponse.hasResult()) { + result = ProtobufUtil.toResult(mutateResponse.getResult()); + } + return new CheckAndMutateResult(success, result); + } + + /** * Wrap a throwable to an action result. * * @param t diff --git a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java index d68ed58..0df64ea 100644 --- a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java +++ b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java @@ -42,6 +42,7 @@ import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Append; import org.apache.hadoop.hbase.client.CheckAndMutate; +import org.apache.hadoop.hbase.client.CheckAndMutateResult; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Durability; import org.apache.hadoop.hbase.client.Get; @@ -746,12 +747,12 @@ public class RemoteHTable implements Table { } @Override - public boolean checkAndMutate(CheckAndMutate checkAndMutate) { + public CheckAndMutateResult checkAndMutate(CheckAndMutate checkAndMutate) { throw new NotImplementedException("Implement later"); } @Override - public boolean[] checkAndMutate(List<CheckAndMutate> checkAndMutates) { + public List<CheckAndMutateResult> checkAndMutate(List<CheckAndMutate> checkAndMutates) { throw new NotImplementedException("Implement later"); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/DummyAsyncTable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/DummyAsyncTable.java index b545208..ceed2cf 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/DummyAsyncTable.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/DummyAsyncTable.java @@ -113,12 +113,13 @@ public class DummyAsyncTable<C extends ScanResultConsumerBase> implements AsyncT } @Override - public CompletableFuture<Boolean> checkAndMutate(CheckAndMutate checkAndMutate) { + public CompletableFuture<CheckAndMutateResult> checkAndMutate(CheckAndMutate checkAndMutate) { return null; } @Override - public List<CompletableFuture<Boolean>> checkAndMutate(List<CheckAndMutate> checkAndMutates) { + public List<CompletableFuture<CheckAndMutateResult>> checkAndMutate( + List<CheckAndMutate> checkAndMutates) { return null; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTable.java index 0de1892..de81750 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTable.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTable.java @@ -632,7 +632,7 @@ public class TestAsyncTable { .ifNotExists(FAMILY, QUALIFIER) .build(new Put(row).addColumn(FAMILY, QUALIFIER, concat(VALUE, i)))) .thenAccept(x -> { - if (x) { + if (x.isSuccess()) { successCount.incrementAndGet(); successIndex.set(i); } @@ -666,7 +666,7 @@ public class TestAsyncTable { .build( new Delete(row).addColumn(FAMILY, QUALIFIER).addColumn(FAMILY, concat(QUALIFIER, i)))) .thenAccept(x -> { - if (x) { + if (x.isSuccess()) { successCount.incrementAndGet(); successIndex.set(i); } @@ -713,7 +713,7 @@ public class TestAsyncTable { .ifEquals(FAMILY, QUALIFIER, VALUE) .build(mutation)) .thenAccept(x -> { - if (x) { + if (x.isSuccess()) { successCount.incrementAndGet(); successIndex.set(i); } @@ -739,50 +739,50 @@ public class TestAsyncTable { Put put = new Put(row); put.addColumn(FAMILY, QUALIFIER, ts, VALUE); - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifNotExists(FAMILY, QUALIFIER) .build(put)).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifEquals(FAMILY, QUALIFIER, VALUE) .timeRange(TimeRange.at(ts + 10000)) .build(put)).get(); - assertFalse(ok); + assertFalse(result.isSuccess()); - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifEquals(FAMILY, QUALIFIER, VALUE) .timeRange(TimeRange.at(ts)) .build(put)).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); RowMutations rm = new RowMutations(row).add((Mutation) put); - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifEquals(FAMILY, QUALIFIER, VALUE) .timeRange(TimeRange.at(ts + 10000)) .build(rm)).get(); - assertFalse(ok); + assertFalse(result.isSuccess()); - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifEquals(FAMILY, QUALIFIER, VALUE) .timeRange(TimeRange.at(ts)) .build(rm)).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); Delete delete = new Delete(row).addColumn(FAMILY, QUALIFIER); - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifEquals(FAMILY, QUALIFIER, VALUE) .timeRange(TimeRange.at(ts + 10000)) .build(delete)).get(); - assertFalse(ok); + assertFalse(result.isSuccess()); - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifEquals(FAMILY, QUALIFIER, VALUE) .timeRange(TimeRange.at(ts)) .build(delete)).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); } @Test @@ -797,45 +797,45 @@ public class TestAsyncTable { table.put(put).get(); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + Result r = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("b"))) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")))).get(); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("E"))).get()); // Delete with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .build(new Delete(row).addColumns(FAMILY, Bytes.toBytes("D")))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get()); // Mutate with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("b"))) .build(new RowMutations(row) .add((Mutation) new Put(row) .addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))) .add((Mutation) new Delete(row).addColumns(FAMILY, Bytes.toBytes("A"))))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + r = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("A"))).get()); } @@ -852,44 +852,44 @@ public class TestAsyncTable { table.put(put).get(); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("b")))) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + Result r = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("c")))) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")))).get(); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("E"))).get()); // Delete with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("b")))) .build(new Delete(row).addColumns(FAMILY, Bytes.toBytes("D")))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get()); // Mutate with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), @@ -899,10 +899,10 @@ public class TestAsyncTable { .add((Mutation) new Put(row) .addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))) .add((Mutation) new Delete(row).addColumns(FAMILY, Bytes.toBytes("A"))))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + r = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("D"))).get(); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("A"))).get()); } @@ -915,25 +915,25 @@ public class TestAsyncTable { table.put(new Put(row).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a"))).get(); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new FilterList( new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)), new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))), new TimestampsFilter(Collections.singletonList(100L)))) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("B"))).get(); - assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B")))); + Result r = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("B"))).get(); + assertEquals("b", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("B")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new FilterList( new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)), new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))), new TimestampsFilter(Collections.singletonList(101L)))) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")))).get(); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("C"))).get()); } @@ -947,24 +947,24 @@ public class TestAsyncTable { .get(); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .timeRange(TimeRange.between(0, 101)) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")))).get(); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("B"))).get(); - assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B")))); + Result r = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("B"))).get(); + assertEquals("b", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("B")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(row) + result = table.checkAndMutate(CheckAndMutate.newBuilder(row) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .timeRange(TimeRange.between(0, 100)) .build(new Put(row).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")))) .get(); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("C"))).get()); } @@ -993,11 +993,11 @@ public class TestAsyncTable { .ifEquals(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("a")) .build(new Put(row2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f"))); - List<Boolean> results = + List<CheckAndMutateResult> results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("A"))).get(); assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A")))); @@ -1016,8 +1016,8 @@ public class TestAsyncTable { results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("A"))).get()); @@ -1041,8 +1041,8 @@ public class TestAsyncTable { results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(row3)).get(); assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F")))); @@ -1075,11 +1075,11 @@ public class TestAsyncTable { .ifNotExists(FAMILY, Bytes.toBytes("B")) .build(new Put(row2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f"))); - List<Boolean> results = + List<CheckAndMutateResult> results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("A"))).get(); assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A")))); @@ -1098,8 +1098,8 @@ public class TestAsyncTable { results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("A"))).get(); assertEquals("a", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A")))); @@ -1120,8 +1120,8 @@ public class TestAsyncTable { results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(row3).addColumn(FAMILY, Bytes.toBytes("C"))).get(); assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C")))); @@ -1162,11 +1162,11 @@ public class TestAsyncTable { Bytes.toBytes("b")))) .build(new Put(row2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("h"))); - List<Boolean> results = + List<CheckAndMutateResult> results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("C"))).get(); assertEquals("g", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C")))); @@ -1193,8 +1193,8 @@ public class TestAsyncTable { results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); assertFalse(table.exists(new Get(row).addColumn(FAMILY, Bytes.toBytes("C"))).get()); @@ -1226,8 +1226,8 @@ public class TestAsyncTable { results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(row)).get(); assertNull(result.getValue(FAMILY, Bytes.toBytes("A"))); @@ -1269,11 +1269,11 @@ public class TestAsyncTable { .timeRange(TimeRange.between(0, 100)) .build(new Put(row2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("h"))); - List<Boolean> results = + List<CheckAndMutateResult> results = table.checkAndMutateAll(Arrays.asList(checkAndMutate1, checkAndMutate2)).get(); - assertTrue(results.get(0)); - assertFalse(results.get(1)); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(row).addColumn(FAMILY, Bytes.toBytes("C"))).get(); assertEquals("g", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C")))); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java index ac82314..cb53f30 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableBatch.java @@ -367,11 +367,11 @@ public class TestAsyncTableBatch { List<Row> actions = Arrays.asList(checkAndMutate1, get, mutations, checkAndMutate2, put); List<Object> results = table.batchAll(actions).get(); - assertTrue(((Result) results.get(0)).getExists()); + assertTrue(((CheckAndMutateResult) results.get(0)).isSuccess()); assertEquals("b", Bytes.toString(((Result) results.get(1)).getValue(FAMILY, Bytes.toBytes("B")))); assertTrue(((Result) results.get(2)).getExists()); - assertFalse(((Result) results.get(3)).getExists()); + assertFalse(((CheckAndMutateResult) results.get(3)).isSuccess()); assertTrue(((Result) results.get(4)).isEmpty()); Result result = table.get(new Get(row1)).get(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java index f88c769..fd10672 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCheckAndMutate.java @@ -28,6 +28,7 @@ import static org.junit.Assert.fail; import java.io.IOException; import java.util.Arrays; import java.util.Collections; +import java.util.List; import org.apache.hadoop.hbase.CompareOperator; import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; @@ -367,10 +368,10 @@ public class TestCheckAndMutate { // put the same row again with C column deleted RowMutations rm = makeRowMutationsWithColumnCDeleted(); - boolean res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + CheckAndMutateResult res = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifEquals(FAMILY, Bytes.toBytes("A"), Bytes.toBytes("a")) .build(rm)); - assertTrue(res); + assertTrue(res.isSuccess()); // get row back and assert the values getOneRowAndAssertAllButCExist(table); @@ -399,45 +400,45 @@ public class TestCheckAndMutate { getOneRowAndAssertAllExist(table); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("b"))) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")))); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E")))); // Delete with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .build(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("D")))); - assertTrue(ok); + assertTrue(result.isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")))); // Mutate with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("b"))) .build(new RowMutations(ROWKEY) .add((Mutation) new Put(ROWKEY) .addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))) .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A"))))); - assertTrue(ok); + assertTrue(result.isSuccess()); - result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A")))); } @@ -452,44 +453,44 @@ public class TestCheckAndMutate { getOneRowAndAssertAllExist(table); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("b")))) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d")))); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("c")))) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E"), Bytes.toBytes("e")))); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("E")))); // Delete with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), new SingleColumnValueFilter(FAMILY, Bytes.toBytes("B"), CompareOperator.EQUAL, Bytes.toBytes("b")))) .build(new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("D")))); - assertTrue(ok); + assertTrue(result.isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D")))); // Mutate with success - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new FilterList( new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a")), @@ -499,10 +500,10 @@ public class TestCheckAndMutate { .add((Mutation) new Put(ROWKEY) .addColumn(FAMILY, Bytes.toBytes("D"), Bytes.toBytes("d"))) .add((Mutation) new Delete(ROWKEY).addColumns(FAMILY, Bytes.toBytes("A"))))); - assertTrue(ok); + assertTrue(result.isSuccess()); - result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); - assertEquals("d", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("D")))); + r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("D"))); + assertEquals("d", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("D")))); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A")))); } @@ -515,25 +516,25 @@ public class TestCheckAndMutate { table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a"))); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new FilterList( new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)), new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))), new TimestampsFilter(Collections.singletonList(100L)))) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")))); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"))); - assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B")))); + Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"))); + assertEquals("b", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("B")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new FilterList( new FamilyFilter(CompareOperator.EQUAL, new BinaryComparator(FAMILY)), new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes("A"))), new TimestampsFilter(Collections.singletonList(101L)))) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")))); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C")))); } @@ -546,23 +547,23 @@ public class TestCheckAndMutate { table.put(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"), 100, Bytes.toBytes("a"))); // Put with success - boolean ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + CheckAndMutateResult result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .timeRange(TimeRange.between(0, 101)) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("b")))); - assertTrue(ok); + assertTrue(result.isSuccess()); - Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"))); - assertEquals("b", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("B")))); + Result r = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("B"))); + assertEquals("b", Bytes.toString(r.getValue(FAMILY, Bytes.toBytes("B")))); // Put with failure - ok = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) + result = table.checkAndMutate(CheckAndMutate.newBuilder(ROWKEY) .ifMatches(new SingleColumnValueFilter(FAMILY, Bytes.toBytes("A"), CompareOperator.EQUAL, Bytes.toBytes("a"))) .timeRange(TimeRange.between(0, 100)) .build(new Put(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"), Bytes.toBytes("c")))); - assertFalse(ok); + assertFalse(result.isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C")))); } @@ -594,10 +595,11 @@ public class TestCheckAndMutate { .ifEquals(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("a")) .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f"))); - boolean[] results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); + List<CheckAndMutateResult> results = + table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))); assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A")))); @@ -616,8 +618,8 @@ public class TestCheckAndMutate { results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A")))); @@ -641,8 +643,8 @@ public class TestCheckAndMutate { results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(ROWKEY3)); assertEquals("f", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("F")))); @@ -672,10 +674,11 @@ public class TestCheckAndMutate { .ifNotExists(FAMILY, Bytes.toBytes("B")) .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("B"), Bytes.toBytes("f"))); - boolean[] results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); + List<CheckAndMutateResult> results = + table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))); assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A")))); @@ -694,8 +697,8 @@ public class TestCheckAndMutate { results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("A"))); assertEquals("a", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("A")))); @@ -716,8 +719,8 @@ public class TestCheckAndMutate { results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(ROWKEY3).addColumn(FAMILY, Bytes.toBytes("C"))); assertEquals("e", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C")))); @@ -757,10 +760,11 @@ public class TestCheckAndMutate { Bytes.toBytes("b")))) .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("h"))); - boolean[] results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); + List<CheckAndMutateResult> results = + table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))); assertEquals("g", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C")))); @@ -787,8 +791,8 @@ public class TestCheckAndMutate { results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); assertFalse(table.exists(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C")))); @@ -820,8 +824,8 @@ public class TestCheckAndMutate { results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); result = table.get(new Get(ROWKEY)); assertNull(result.getValue(FAMILY, Bytes.toBytes("A"))); @@ -862,10 +866,11 @@ public class TestCheckAndMutate { .timeRange(TimeRange.between(0, 100)) .build(new Put(ROWKEY2).addColumn(FAMILY, Bytes.toBytes("F"), Bytes.toBytes("h"))); - boolean[] results = table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); + List<CheckAndMutateResult> results = + table.checkAndMutate(Arrays.asList(checkAndMutate1, checkAndMutate2)); - assertTrue(results[0]); - assertFalse(results[1]); + assertTrue(results.get(0).isSuccess()); + assertFalse(results.get(1).isSuccess()); Result result = table.get(new Get(ROWKEY).addColumn(FAMILY, Bytes.toBytes("C"))); assertEquals("g", Bytes.toString(result.getValue(FAMILY, Bytes.toBytes("C")))); 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 1e281fb..f600ab7 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 @@ -484,11 +484,11 @@ public class TestFromClientSide3 { Object[] results = new Object[actions.size()]; table.batch(actions, results); - assertTrue(((Result) results[0]).getExists()); + assertTrue(((CheckAndMutateResult) results[0]).isSuccess()); assertEquals("b", Bytes.toString(((Result) results[1]).getValue(FAMILY, Bytes.toBytes("B")))); assertTrue(((Result) results[2]).getExists()); - assertFalse(((Result) results[3]).getExists()); + assertFalse(((CheckAndMutateResult) results[3]).isSuccess()); assertTrue(((Result) results[4]).isEmpty()); Result result = table.get(new Get(row1)); diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java index 19154d6..81f4182 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Append; import org.apache.hadoop.hbase.client.CheckAndMutate; +import org.apache.hadoop.hbase.client.CheckAndMutateResult; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Increment; @@ -433,12 +434,12 @@ public class ThriftTable implements Table { } @Override - public boolean checkAndMutate(CheckAndMutate checkAndMutate) { + public CheckAndMutateResult checkAndMutate(CheckAndMutate checkAndMutate) { throw new NotImplementedException("Implement later"); } @Override - public boolean[] checkAndMutate(List<CheckAndMutate> checkAndMutates) { + public List<CheckAndMutateResult> checkAndMutate(List<CheckAndMutate> checkAndMutates) { throw new NotImplementedException("Implement later"); }