@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; } }
bulkMutation.add(rowMutation.build()); } else { client.mutateRow(rowMutation.build());
public ListenableFuture<MutateRowResponse> add(MutateRowRequest request) { return add(convert(request)); }
private ListenableFuture<?> issueAsyncRequest(BulkOperation bulkOperation, Row row) { try { if (row instanceof Get) { return bulkOperation.bulkRead.add(requestAdapter.adapt((Get) row)); } else if (row instanceof Put) { return bulkOperation.bulkMutation.add(requestAdapter.adaptEntry((Put) row)); } else if (row instanceof Delete) { return bulkOperation.bulkMutation.add(requestAdapter.adaptEntry((Delete) row)); } else if (row instanceof Append) { return asyncExecutor.readModifyWriteRowAsync(requestAdapter.adapt((Append) row)); } else if (row instanceof Increment) { return asyncExecutor.readModifyWriteRowAsync(requestAdapter.adapt((Increment) row)); } else if (row instanceof RowMutations) { return bulkOperation.bulkMutation.add(requestAdapter.adaptEntry((RowMutations) row)); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); return Futures.immediateFailedFuture(new IOException("Could not process the batch due to interrupt", e)); } catch (Throwable e) { return Futures.immediateFailedFuture(new IOException("Could not process the batch", e)); } LOG.error("Encountered unknown action type %s", row.getClass()); return Futures.immediateFailedFuture( new IllegalArgumentException("Encountered unknown action type: " + row.getClass())); }
private ListenableFuture<?> issueAsyncRequest(BulkOperation bulkOperation, Row row) { try { if (row instanceof Get) { return bulkOperation.bulkRead.add(requestAdapter.adapt((Get) row)); } else if (row instanceof Put) { return bulkOperation.bulkMutation.add(requestAdapter.adaptEntry((Put) row)); } else if (row instanceof Delete) { return bulkOperation.bulkMutation.add(requestAdapter.adaptEntry((Delete) row)); } else if (row instanceof Append) { return asyncExecutor.readModifyWriteRowAsync(requestAdapter.adapt((Append) row)); } else if (row instanceof Increment) { return asyncExecutor.readModifyWriteRowAsync(requestAdapter.adapt((Increment) row)); } else if (row instanceof RowMutations) { return bulkOperation.bulkMutation.add(requestAdapter.adaptEntry((RowMutations) row)); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); return Futures.immediateFailedFuture(new IOException("Could not process the batch due to interrupt", e)); } catch (Throwable e) { return Futures.immediateFailedFuture(new IOException("Could not process the batch", e)); } LOG.error("Encountered unknown action type %s", row.getClass()); return Futures.immediateFailedFuture( new IllegalArgumentException("Encountered unknown action type: " + row.getClass())); }
new IllegalArgumentException("Cannot perform a mutation on a null object.")); } else if (mutation instanceof Put) { future = bulkMutation.add(adapter.adaptEntry((Put) mutation)); } else if (mutation instanceof Delete) { future = bulkMutation.add(adapter.adaptEntry((Delete) mutation)); } else if (mutation instanceof Increment) { future = asyncExecutor.readModifyWriteRowAsync(adapter.adapt((Increment) mutation));
@Override public CompletionStage<MutateRowResponse> writeRecord(KV<ByteString, Iterable<Mutation>> record) throws IOException { MutateRowsRequest.Entry request = MutateRowsRequest.Entry.newBuilder() .setRowKey(record.getKey()) .addAllMutations(record.getValue()) .build(); CompletableFuture<MutateRowResponse> result = new CompletableFuture<>(); Futures.addCallback( bulkMutation.add(request), new FutureCallback<MutateRowResponse>() { @Override public void onSuccess(MutateRowResponse mutateRowResponse) { result.complete(mutateRowResponse); } @Override public void onFailure(Throwable throwable) { result.completeExceptionally(throwable); } }); return result; } }
new IllegalArgumentException("Cannot perform a mutation on a null object.")); } else if (mutation instanceof Put) { future = bulkMutation.add(adapter.adaptEntry((Put) mutation)); } else if (mutation instanceof Delete) { future = bulkMutation.add(adapter.adaptEntry((Delete) mutation)); } else if (mutation instanceof Increment) { future = asyncExecutor.readModifyWriteRowAsync(adapter.adapt((Increment) mutation));
/** * This test ensures that protobuf creation and interactions with {@link BulkMutation} work as * expected. * * @throws IOException * @throws InterruptedException */ @Test public void testWrite() throws IOException, InterruptedException { BigtableService.Writer underTest = new BigtableServiceImpl.BigtableWriterImpl(mockSession, TABLE_NAME); Mutation mutation = Mutation.newBuilder() .setSetCell(SetCell.newBuilder().setFamilyName("Family").build()) .build(); ByteString key = ByteString.copyFromUtf8("key"); SettableFuture<MutateRowResponse> fakeResponse = SettableFuture.create(); when(mockBulkMutation.add(any(MutateRowsRequest.Entry.class))).thenReturn(fakeResponse); underTest.writeRecord(KV.of(key, ImmutableList.of(mutation))); Entry expected = MutateRowsRequest.Entry.newBuilder().setRowKey(key).addMutations(mutation).build(); verify(mockBulkMutation, times(1)).add(expected); underTest.close(); verify(mockBulkMutation, times(1)).flush(); } }