Search in sources :

Example 16 with Mutation

use of com.google.cloud.bigtable.data.v2.models.Mutation in project java-bigtable by googleapis.

the class MutateRowsAttemptCallable method handleAttemptSuccess.

/**
 * Handle entry level failures. All new response entries are inspected for failure. If any
 * transient failures are found, their corresponding mutations are scheduled for the next RPC. The
 * caller is notified of both new found errors and pre-existing permanent errors in the thrown
 * {@link MutateRowsException}. If no errors exist, then the attempt future is successfully
 * completed.
 */
private void handleAttemptSuccess(List<MutateRowsResponse> responses) {
    List<FailedMutation> allFailures = Lists.newArrayList(permanentFailures);
    MutateRowsRequest lastRequest = currentRequest;
    Builder builder = lastRequest.toBuilder().clearEntries();
    List<Integer> newOriginalIndexes = Lists.newArrayList();
    for (MutateRowsResponse response : responses) {
        for (Entry entry : response.getEntriesList()) {
            if (entry.getStatus().getCode() == Code.OK_VALUE) {
                continue;
            }
            int origIndex = getOriginalIndex((int) entry.getIndex());
            FailedMutation failedMutation = FailedMutation.create(origIndex, createEntryError(entry.getStatus()));
            allFailures.add(failedMutation);
            if (!failedMutation.getError().isRetryable()) {
                permanentFailures.add(failedMutation);
            } else {
                // Schedule the mutation entry for the next RPC by adding it to the request builder and
                // recording it's original index
                newOriginalIndexes.add(origIndex);
                builder.addEntries(lastRequest.getEntries((int) entry.getIndex()));
            }
        }
    }
    currentRequest = builder.build();
    originalIndexes = newOriginalIndexes;
    if (!allFailures.isEmpty()) {
        boolean isRetryable = builder.getEntriesCount() > 0;
        throw new MutateRowsException(null, allFailures, isRetryable);
    }
}
Also used : Entry(com.google.bigtable.v2.MutateRowsResponse.Entry) MutateRowsResponse(com.google.bigtable.v2.MutateRowsResponse) MutateRowsException(com.google.cloud.bigtable.data.v2.models.MutateRowsException) MutateRowsRequest(com.google.bigtable.v2.MutateRowsRequest) Builder(com.google.bigtable.v2.MutateRowsRequest.Builder) FailedMutation(com.google.cloud.bigtable.data.v2.models.MutateRowsException.FailedMutation)

Example 17 with Mutation

use of com.google.cloud.bigtable.data.v2.models.Mutation in project java-bigtable by googleapis.

the class MutateRowsAttemptCallable method handleAttemptError.

/**
 * Handle an RPC level failure by generating a {@link FailedMutation} for each expected entry. The
 * newly generated {@link FailedMutation}s will be combined with the permanentFailures to give the
 * caller the whole picture since the first call. This method will always throw a {@link
 * MutateRowsException}.
 */
private void handleAttemptError(Throwable rpcError) {
    ApiException entryError = createSyntheticErrorForRpcFailure(rpcError);
    ImmutableList.Builder<FailedMutation> allFailures = ImmutableList.builder();
    MutateRowsRequest lastRequest = currentRequest;
    allFailures.addAll(permanentFailures);
    Builder builder = lastRequest.toBuilder().clearEntries();
    List<Integer> newOriginalIndexes = Lists.newArrayList();
    for (int i = 0; i < currentRequest.getEntriesCount(); i++) {
        int origIndex = getOriginalIndex(i);
        FailedMutation failedMutation = FailedMutation.create(origIndex, entryError);
        allFailures.add(failedMutation);
        if (!failedMutation.getError().isRetryable()) {
            permanentFailures.add(failedMutation);
        } else {
            // Schedule the mutation entry for the next RPC by adding it to the request builder and
            // recording its original index
            newOriginalIndexes.add(origIndex);
            builder.addEntries(lastRequest.getEntries(i));
        }
    }
    currentRequest = builder.build();
    originalIndexes = newOriginalIndexes;
    throw new MutateRowsException(rpcError, allFailures.build(), entryError.isRetryable());
}
Also used : MutateRowsException(com.google.cloud.bigtable.data.v2.models.MutateRowsException) MutateRowsRequest(com.google.bigtable.v2.MutateRowsRequest) ImmutableList(com.google.common.collect.ImmutableList) Builder(com.google.bigtable.v2.MutateRowsRequest.Builder) FailedMutation(com.google.cloud.bigtable.data.v2.models.MutateRowsException.FailedMutation) ApiException(com.google.api.gax.rpc.ApiException)

Aggregations

Test (org.junit.Test)10 RowMutation (com.google.cloud.bigtable.data.v2.models.RowMutation)9 MutateRowRequest (com.google.bigtable.v2.MutateRowRequest)7 Put (org.apache.hadoop.hbase.client.Put)6 Mutation (com.google.bigtable.v2.Mutation)5 SetCell (com.google.bigtable.v2.Mutation.SetCell)5 ConditionalRowMutation (com.google.cloud.bigtable.data.v2.models.ConditionalRowMutation)4 MutateRowsException (com.google.cloud.bigtable.data.v2.models.MutateRowsException)3 MutateRowsRequest (com.google.bigtable.v2.MutateRowsRequest)2 Builder (com.google.bigtable.v2.MutateRowsRequest.Builder)2 BigtableDataClient (com.google.cloud.bigtable.data.v2.BigtableDataClient)2 FailedMutation (com.google.cloud.bigtable.data.v2.models.MutateRowsException.FailedMutation)2 ApiException (com.google.api.gax.rpc.ApiException)1 DeadlineExceededException (com.google.api.gax.rpc.DeadlineExceededException)1 UnavailableException (com.google.api.gax.rpc.UnavailableException)1 MutateRowsResponse (com.google.bigtable.v2.MutateRowsResponse)1 Entry (com.google.bigtable.v2.MutateRowsResponse.Entry)1 Filter (com.google.cloud.bigtable.data.v2.models.Filters.Filter)1 Mutation (com.google.cloud.bigtable.data.v2.models.Mutation)1 ReadModifyWriteRow (com.google.cloud.bigtable.data.v2.models.ReadModifyWriteRow)1