@Override public Status delete(String table, String key) { if (debug) { System.out.println("Doing delete for key: " + key); } setTable(table); final MutateRowRequest.Builder rowMutation = MutateRowRequest.newBuilder() .setRowKey(ByteString.copyFromUtf8(key)) .setTableNameBytes(ByteStringer.wrap(lastTableBytes)); rowMutation.addMutationsBuilder().setDeleteFromRow( DeleteFromRow.getDefaultInstance()); try { if (clientSideBuffering) { bulkMutation.add(rowMutation.build()); } else { client.mutateRow(rowMutation.build()); } return Status.OK; } catch (RuntimeException e) { System.err.println("Failed to delete key: " + key + " " + e.getMessage()); return Status.ERROR; } }
/** {@inheritDoc} */ @Override public ResultScanner<FlatRow> readFlatRows(Query request) { return delegate.readFlatRows(request.toProto(requestContext)); }
/** * Sample row keys from a table, returning a Future that will complete when the sampling has * completed. * * @param request a {@link com.google.bigtable.v2.SampleRowKeysRequest} object. * @return a {@link com.google.common.util.concurrent.ListenableFuture} object. */ public CompletableFuture<List<SampleRowKeysResponse>> sampleRowKeysAsync(SampleRowKeysRequest request) { return toCompletableFuture(dataClient.sampleRowKeysAsync(request)); }
@Override public List<HRegionInfo> getAllRegionInfos(TableName tableName) throws IOException { ServerName serverName = ServerName.valueOf(options.getDataHost(), options.getPort(), 0); SampleRowKeysRequest.Builder request = SampleRowKeysRequest.newBuilder(); request.setTableName(options.getInstanceName().toTableNameStr(tableName.getNameAsString())); List<SampleRowKeysResponse> sampleRowKeyResponse = this.session.getDataClient().sampleRowKeys(request.build()); return getSampledRowKeysAdapter(tableName, serverName).adaptResponse(sampleRowKeyResponse) .stream() .map(location -> location.getRegionInfo()) .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); }
/** {@inheritDoc} */ @Override public Row readModifyWriteRow(ReadModifyWriteRow readModifyWriteRow) { ReadModifyWriteRowResponse response = delegate.readModifyWriteRow(readModifyWriteRow.toProto(requestContext)); return transformResponse(response); }
@Override public ListenableFuture<MutateRowResponse> call(BigtableDataClient client, MutateRowRequest request) { return client.mutateRowAsync(request); } };
@Override public ListenableFuture<List<FlatRow>> call(BigtableDataClient client, ReadRowsRequest request) { return client.readFlatRowsAsync(request); } };
@Override public ListenableFuture<CheckAndMutateRowResponse> call(BigtableDataClient client, CheckAndMutateRowRequest request) { return client.checkAndMutateRowAsync(request); } };
/** {@inheritDoc} */ @Override public List<FlatRow> readFlatRowsList(Query request) { return delegate.readFlatRowsList(request.toProto(requestContext)); }
/** {@inheritDoc} */ @Override public Boolean checkAndMutateRow(ConditionalRowMutation conditionalRowMutation) { CheckAndMutateRowResponse response = delegate.checkAndMutateRow(conditionalRowMutation.toProto(requestContext)); return response.getPredicateMatched(); }
/** * {@inheritDoc} */ public void scan(Scan scan, final ScanResultConsumer consumer) { if (AbstractBigtableTable.hasWhileMatchFilter(scan.getFilter())) { throw new UnsupportedOperationException( "scan with consumer and while match filter is not allowed"); } client.getClient().readFlatRows(hbaseAdapter.adapt(scan), new StreamObserver<FlatRow>() { @Override public void onNext(FlatRow value) { consumer.onNext(Adapters.FLAT_ROW_ADAPTER.adaptResponse(value)); } @Override public void onError(Throwable t) { consumer.onError(t); } @Override public void onCompleted() { consumer.onComplete(); } }); }
/** * Sample row keys from a table, returning a Future that will complete when the sampling has * completed. * * @param request a {@link com.google.bigtable.v2.SampleRowKeysRequest} object. * @return a {@link com.google.common.util.concurrent.ListenableFuture} object. */ public CompletableFuture<List<SampleRowKeysResponse>> sampleRowKeysAsync(SampleRowKeysRequest request) { return toCompletableFuture(dataClient.sampleRowKeysAsync(request)); }
@Override public List<HRegionInfo> getAllRegionInfos(TableName tableName) throws IOException { ServerName serverName = ServerName.valueOf(options.getDataHost(), options.getPort(), 0); SampleRowKeysRequest.Builder request = SampleRowKeysRequest.newBuilder(); request.setTableName(options.getInstanceName().toTableNameStr(tableName.getNameAsString())); List<SampleRowKeysResponse> sampleRowKeyResponse = this.session.getDataClient().sampleRowKeys(request.build()); return getSampledRowKeysAdapter(tableName, serverName).adaptResponse(sampleRowKeyResponse) .stream() .map(location -> location.getRegionInfo()) .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); }
/** {@inheritDoc} */ @Override public Result increment(Increment increment) throws IOException { LOG.trace("increment(Increment)"); Span span = TRACER.spanBuilder("BigtableTable.increment").startSpan(); try (Scope scope = TRACER.withSpan(span)) { ReadModifyWriteRowRequest request = hbaseAdapter.adapt(increment); return Adapters.ROW_ADAPTER.adaptResponse(client.readModifyWriteRow(request).getRow()); } catch (Throwable t) { span.setStatus(Status.UNKNOWN); throw logAndCreateIOException("increment", increment.getRow(), t); } finally { span.end(); } }
/** * Mutate a row atomically. * * @return a {@link com.google.common.util.concurrent.ListenableFuture} that will finish when * the mutation has completed. * @param request a {@link com.google.bigtable.v2.MutateRowRequest} object. */ public CompletableFuture<MutateRowResponse> mutateRowAsync(MutateRowRequest request) { return toCompletableFuture(dataClient.mutateRowAsync(request)); }
/** * Read multiple {@link FlatRow}s into an in-memory list, in key order. * * @return a {@link com.google.common.util.concurrent.ListenableFuture} that will finish when * all reads have completed. * @param request a {@link com.google.bigtable.v2.ReadRowsRequest} object. */ public CompletableFuture<List<FlatRow>> readFlatRowsAsync(ReadRowsRequest request) { return toCompletableFuture(dataClient.readFlatRowsAsync(request)); }
/** * Mutate a row atomically dependent on a precondition. * * @return a {@link com.google.common.util.concurrent.ListenableFuture} that will finish when * the mutation has completed. * @param request a {@link com.google.bigtable.v2.CheckAndMutateRowRequest} object. */ public CompletableFuture<CheckAndMutateRowResponse> checkAndMutateRowAsync( CheckAndMutateRowRequest request){ return toCompletableFuture(dataClient.checkAndMutateRowAsync(request)); }
private FlatRow getResults(Get get, String method) throws IOException { try (Timer.Context ignored = metrics.getTimer.time()) { List<FlatRow> list = client.readFlatRowsList(hbaseAdapter.adapt(get)); switch(list.size()) { case 0: return null; case 1: return list.get(0); default: throw new IllegalStateException("Multiple responses found for " + method); } } }
private boolean checkAndMutate(final byte[] row, ConditionalRowMutation request, String type) throws IOException { Span span = TRACER.spanBuilder("BigtableTable." + type).startSpan(); try (Scope scope = TRACER.withSpan(span)) { CheckAndMutateRowRequest checkAndMutateRowRequest = request.toProto(requestContext); CheckAndMutateRowResponse response = client.checkAndMutateRow(checkAndMutateRowRequest); return CheckAndMutateUtil.wasMutationApplied(checkAndMutateRowRequest, response); } catch (Throwable t) { span.setStatus(Status.UNKNOWN); throw logAndCreateIOException(type, row, t); } finally { span.end(); } }
/** * {@inheritDoc} */ public void scan(Scan scan, final ScanResultConsumer consumer) { if (AbstractBigtableTable.hasWhileMatchFilter(scan.getFilter())) { throw new UnsupportedOperationException( "scan with consumer and while match filter is not allowed"); } client.getClient().readFlatRows(hbaseAdapter.adapt(scan), new StreamObserver<FlatRow>() { @Override public void onNext(FlatRow value) { consumer.onNext(Adapters.FLAT_ROW_ADAPTER.adaptResponse(value)); } @Override public void onError(Throwable t) { consumer.onError(t); } @Override public void onCompleted() { consumer.onComplete(); } }); }