Search in sources :

Example 1 with MultiRequest

use of org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest in project hbase by apache.

the class HTable method mutateRow.

/**
   * {@inheritDoc}
   */
@Override
public void mutateRow(final RowMutations rm) throws IOException {
    CancellableRegionServerCallable<MultiResponse> callable = new CancellableRegionServerCallable<MultiResponse>(this.connection, getName(), rm.getRow(), rpcControllerFactory.newController(), writeRpcTimeout, new RetryingTimeTracker().start()) {

        @Override
        protected MultiResponse rpcCall() throws Exception {
            RegionAction.Builder regionMutationBuilder = RequestConverter.buildRegionAction(getLocation().getRegionInfo().getRegionName(), rm);
            regionMutationBuilder.setAtomic(true);
            MultiRequest request = MultiRequest.newBuilder().addRegionAction(regionMutationBuilder.build()).build();
            ClientProtos.MultiResponse response = doMulti(request);
            ClientProtos.RegionActionResult res = response.getRegionActionResultList().get(0);
            if (res.hasException()) {
                Throwable ex = ProtobufUtil.toException(res.getException());
                if (ex instanceof IOException) {
                    throw (IOException) ex;
                }
                throw new IOException("Failed to mutate row: " + Bytes.toStringBinary(rm.getRow()), ex);
            }
            return ResponseConverter.getResults(request, response, getRpcControllerCellScanner());
        }
    };
    AsyncProcessTask task = AsyncProcessTask.newBuilder().setPool(pool).setTableName(tableName).setRowAccess(rm.getMutations()).setCallable(callable).setRpcTimeout(writeRpcTimeout).setOperationTimeout(operationTimeout).setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL).build();
    AsyncRequestFuture ars = multiAp.submit(task);
    ars.waitUntilDone();
    if (ars.hasError()) {
        throw ars.getErrors();
    }
}
Also used : MultiRequest(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest) RegionAction(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction) InterruptedIOException(java.io.InterruptedIOException) IOException(java.io.IOException) ClientProtos(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos)

Example 2 with MultiRequest

use of org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest in project hbase by apache.

the class RawAsyncTableImpl method mutateRow.

// 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 static <RESP> CompletableFuture<RESP> mutateRow(HBaseRpcController controller, HRegionLocation loc, ClientService.Interface stub, RowMutations mutation, Converter<MultiRequest, byte[], RowMutations> reqConvert, Function<Result, RESP> respConverter) {
    CompletableFuture<RESP> future = new CompletableFuture<>();
    try {
        byte[] regionName = loc.getRegionInfo().getRegionName();
        MultiRequest req = reqConvert.convert(regionName, mutation);
        stub.multi(controller, req, new RpcCallback<MultiResponse>() {

            @Override
            public void run(MultiResponse resp) {
                if (controller.failed()) {
                    future.completeExceptionally(controller.getFailed());
                } else {
                    try {
                        org.apache.hadoop.hbase.client.MultiResponse multiResp = ResponseConverter.getResults(req, resp, controller.cellScanner());
                        Throwable ex = multiResp.getException(regionName);
                        if (ex != null) {
                            future.completeExceptionally(ex instanceof IOException ? ex : new IOException("Failed to mutate row: " + Bytes.toStringBinary(mutation.getRow()), ex));
                        } else {
                            future.complete(respConverter.apply((Result) multiResp.getResults().get(regionName).result.get(0)));
                        }
                    } catch (IOException e) {
                        future.completeExceptionally(e);
                    }
                }
            }
        });
    } catch (IOException e) {
        future.completeExceptionally(e);
    }
    return future;
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) MultiRequest(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest) MultiResponse(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse) IOException(java.io.IOException)

Example 3 with MultiRequest

use of org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest in project hbase by apache.

the class HTable method checkAndMutate.

/**
   * {@inheritDoc}
   */
@Override
public boolean checkAndMutate(final byte[] row, final byte[] family, final byte[] qualifier, final CompareOp compareOp, final byte[] value, final RowMutations rm) throws IOException {
    CancellableRegionServerCallable<MultiResponse> callable = new CancellableRegionServerCallable<MultiResponse>(connection, getName(), rm.getRow(), rpcControllerFactory.newController(), writeRpcTimeout, new RetryingTimeTracker().start()) {

        @Override
        protected MultiResponse rpcCall() throws Exception {
            CompareType compareType = CompareType.valueOf(compareOp.name());
            MultiRequest request = RequestConverter.buildMutateRequest(getLocation().getRegionInfo().getRegionName(), row, family, qualifier, new BinaryComparator(value), compareType, rm);
            ClientProtos.MultiResponse response = doMulti(request);
            ClientProtos.RegionActionResult res = response.getRegionActionResultList().get(0);
            if (res.hasException()) {
                Throwable ex = ProtobufUtil.toException(res.getException());
                if (ex instanceof IOException) {
                    throw (IOException) ex;
                }
                throw new IOException("Failed to checkAndMutate row: " + Bytes.toStringBinary(rm.getRow()), ex);
            }
            return ResponseConverter.getResults(request, response, getRpcControllerCellScanner());
        }
    };
    /**
     *  Currently, we use one array to store 'processed' flag which is returned by server.
     *  It is excessive to send such a large array, but that is required by the framework right now
     * */
    Object[] results = new Object[rm.getMutations().size()];
    AsyncProcessTask task = AsyncProcessTask.newBuilder().setPool(pool).setTableName(tableName).setRowAccess(rm.getMutations()).setResults(results).setCallable(callable).setRpcTimeout(Math.max(readRpcTimeout, writeRpcTimeout)).setOperationTimeout(operationTimeout).setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL).build();
    AsyncRequestFuture ars = multiAp.submit(task);
    ars.waitUntilDone();
    if (ars.hasError()) {
        throw ars.getErrors();
    }
    return ((Result) results[0]).getExists();
}
Also used : MultiRequest(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest) CompareType(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.CompareType) InterruptedIOException(java.io.InterruptedIOException) IOException(java.io.IOException) BinaryComparator(org.apache.hadoop.hbase.filter.BinaryComparator) ClientProtos(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos)

Aggregations

IOException (java.io.IOException)3 MultiRequest (org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest)3 InterruptedIOException (java.io.InterruptedIOException)2 ClientProtos (org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos)2 CompletableFuture (java.util.concurrent.CompletableFuture)1 BinaryComparator (org.apache.hadoop.hbase.filter.BinaryComparator)1 MultiResponse (org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse)1 RegionAction (org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction)1 CompareType (org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.CompareType)1