Search in sources :

Example 16 with Builder

use of com.google.cloud.bigtable.data.v2.BigtableDataSettings.Builder 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 Builder

use of com.google.cloud.bigtable.data.v2.BigtableDataSettings.Builder 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)9 RetrySettings (com.google.api.gax.retrying.RetrySettings)4 BigtableDataSettings (com.google.cloud.bigtable.data.v2.BigtableDataSettings)3 MutateRowsBatchingDescriptor (com.google.cloud.bigtable.data.v2.stub.mutaterows.MutateRowsBatchingDescriptor)3 ReadRowsBatchingDescriptor (com.google.cloud.bigtable.data.v2.stub.readrows.ReadRowsBatchingDescriptor)3 InstantiatingGrpcChannelProvider (com.google.api.gax.grpc.InstantiatingGrpcChannelProvider)2 StatusCode (com.google.api.gax.rpc.StatusCode)2 MutateRowsRequest (com.google.bigtable.v2.MutateRowsRequest)2 Builder (com.google.bigtable.v2.MutateRowsRequest.Builder)2 Filters (com.google.cloud.bigtable.data.v2.models.Filters)2 MutateRowsException (com.google.cloud.bigtable.data.v2.models.MutateRowsException)2 FailedMutation (com.google.cloud.bigtable.data.v2.models.MutateRowsException.FailedMutation)2 ApiFunction (com.google.api.core.ApiFunction)1 BatcherImpl (com.google.api.gax.batching.BatcherImpl)1 FlowControlEventStats (com.google.api.gax.batching.FlowControlEventStats)1 ApiException (com.google.api.gax.rpc.ApiException)1 ClientContext (com.google.api.gax.rpc.ClientContext)1 OpencensusTracerFactory (com.google.api.gax.tracing.OpencensusTracerFactory)1 Credentials (com.google.auth.Credentials)1 ServiceAccountJwtAccessCredentials (com.google.auth.oauth2.ServiceAccountJwtAccessCredentials)1