Search in sources :

Example 1 with Code

use of io.grpc.Status.Code in project grpc-java by grpc.

the class AbstractClientStream2Test method cancel_doNotAcceptOk.

@Test
public void cancel_doNotAcceptOk() {
    for (Code code : Code.values()) {
        ClientStreamListener listener = new NoopClientStreamListener();
        AbstractClientStream2 stream = new BaseAbstractClientStream(allocator, statsTraceCtx);
        stream.start(listener);
        if (code != Code.OK) {
            stream.cancel(Status.fromCodeValue(code.value()));
        } else {
            try {
                stream.cancel(Status.fromCodeValue(code.value()));
                fail();
            } catch (IllegalArgumentException e) {
            // ignore
            }
        }
    }
}
Also used : Code(io.grpc.Status.Code) Test(org.junit.Test)

Example 2 with Code

use of io.grpc.Status.Code in project etcd-java by IBM.

the class EtcdClient method retryAuthRequest.

protected static boolean retryAuthRequest(Throwable error) {
    Status status = Status.fromThrowable(error);
    Code statusCode = status != null ? status.getCode() : null;
    return statusCode == Code.UNAVAILABLE && GrpcClient.isConnectException(error);
}
Also used : Status(io.grpc.Status) Code(io.grpc.Status.Code)

Example 3 with Code

use of io.grpc.Status.Code in project grpc-java by grpc.

the class AbstractClientStreamTest method cancel_doNotAcceptOk.

@Test
public void cancel_doNotAcceptOk() {
    for (Code code : Code.values()) {
        ClientStreamListener listener = new NoopClientStreamListener();
        AbstractClientStream stream = new BaseAbstractClientStream(allocator, statsTraceCtx, transportTracer);
        stream.start(listener);
        if (code != Code.OK) {
            stream.cancel(Status.fromCodeValue(code.value()));
        } else {
            try {
                stream.cancel(Status.fromCodeValue(code.value()));
                fail();
            } catch (IllegalArgumentException e) {
            // ignore
            }
        }
    }
}
Also used : Code(io.grpc.Status.Code) Test(org.junit.Test)

Example 4 with Code

use of io.grpc.Status.Code in project grpc-java by grpc.

the class ClientXdsClient method parseRetryPolicy.

// Return null if we ignore the given policy.
@Nullable
private static StructOrError<RetryPolicy> parseRetryPolicy(io.envoyproxy.envoy.config.route.v3.RetryPolicy retryPolicyProto) {
    int maxAttempts = 2;
    if (retryPolicyProto.hasNumRetries()) {
        maxAttempts = retryPolicyProto.getNumRetries().getValue() + 1;
    }
    Duration initialBackoff = Durations.fromMillis(25);
    Duration maxBackoff = Durations.fromMillis(250);
    if (retryPolicyProto.hasRetryBackOff()) {
        RetryBackOff retryBackOff = retryPolicyProto.getRetryBackOff();
        if (!retryBackOff.hasBaseInterval()) {
            return StructOrError.fromError("No base_interval specified in retry_backoff");
        }
        Duration originalInitialBackoff = initialBackoff = retryBackOff.getBaseInterval();
        if (Durations.compare(initialBackoff, Durations.ZERO) <= 0) {
            return StructOrError.fromError("base_interval in retry_backoff must be positive");
        }
        if (Durations.compare(initialBackoff, Durations.fromMillis(1)) < 0) {
            initialBackoff = Durations.fromMillis(1);
        }
        if (retryBackOff.hasMaxInterval()) {
            maxBackoff = retryPolicyProto.getRetryBackOff().getMaxInterval();
            if (Durations.compare(maxBackoff, originalInitialBackoff) < 0) {
                return StructOrError.fromError("max_interval in retry_backoff cannot be less than base_interval");
            }
            if (Durations.compare(maxBackoff, Durations.fromMillis(1)) < 0) {
                maxBackoff = Durations.fromMillis(1);
            }
        } else {
            maxBackoff = Durations.fromNanos(Durations.toNanos(initialBackoff) * 10);
        }
    }
    Iterable<String> retryOns = Splitter.on(',').omitEmptyStrings().trimResults().split(retryPolicyProto.getRetryOn());
    ImmutableList.Builder<Code> retryableStatusCodesBuilder = ImmutableList.builder();
    for (String retryOn : retryOns) {
        Code code;
        try {
            code = Code.valueOf(retryOn.toUpperCase(Locale.US).replace('-', '_'));
        } catch (IllegalArgumentException e) {
            // unsupported value, such as "5xx"
            continue;
        }
        if (!SUPPORTED_RETRYABLE_CODES.contains(code)) {
            // unsupported value
            continue;
        }
        retryableStatusCodesBuilder.add(code);
    }
    List<Code> retryableStatusCodes = retryableStatusCodesBuilder.build();
    return StructOrError.fromStruct(RetryPolicy.create(maxAttempts, retryableStatusCodes, initialBackoff, maxBackoff, /* perAttemptRecvTimeout= */
    null));
}
Also used : RetryBackOff(io.envoyproxy.envoy.config.route.v3.RetryPolicy.RetryBackOff) ImmutableList(com.google.common.collect.ImmutableList) Duration(com.google.protobuf.Duration) Code(io.grpc.Status.Code) LbEndpoint(io.grpc.xds.Endpoints.LbEndpoint) Nullable(javax.annotation.Nullable)

Example 5 with Code

use of io.grpc.Status.Code in project grpc-java by grpc.

the class XdsNameResolver method generateServiceConfigWithMethodConfig.

@VisibleForTesting
static Map<String, ?> generateServiceConfigWithMethodConfig(@Nullable Long timeoutNano, @Nullable RetryPolicy retryPolicy) {
    if (timeoutNano == null && (retryPolicy == null || retryPolicy.retryableStatusCodes().isEmpty())) {
        return Collections.emptyMap();
    }
    ImmutableMap.Builder<String, Object> methodConfig = ImmutableMap.builder();
    methodConfig.put("name", Collections.singletonList(Collections.emptyMap()));
    if (retryPolicy != null && !retryPolicy.retryableStatusCodes().isEmpty()) {
        ImmutableMap.Builder<String, Object> rawRetryPolicy = ImmutableMap.builder();
        rawRetryPolicy.put("maxAttempts", (double) retryPolicy.maxAttempts());
        rawRetryPolicy.put("initialBackoff", Durations.toString(retryPolicy.initialBackoff()));
        rawRetryPolicy.put("maxBackoff", Durations.toString(retryPolicy.maxBackoff()));
        rawRetryPolicy.put("backoffMultiplier", 2D);
        List<String> codes = new ArrayList<>(retryPolicy.retryableStatusCodes().size());
        for (Code code : retryPolicy.retryableStatusCodes()) {
            codes.add(code.name());
        }
        rawRetryPolicy.put("retryableStatusCodes", Collections.unmodifiableList(codes));
        if (retryPolicy.perAttemptRecvTimeout() != null) {
            rawRetryPolicy.put("perAttemptRecvTimeout", Durations.toString(retryPolicy.perAttemptRecvTimeout()));
        }
        methodConfig.put("retryPolicy", rawRetryPolicy.build());
    }
    if (timeoutNano != null) {
        String timeout = timeoutNano / 1_000_000_000.0 + "s";
        methodConfig.put("timeout", timeout);
    }
    return Collections.singletonMap("methodConfig", Collections.singletonList(methodConfig.build()));
}
Also used : ArrayList(java.util.ArrayList) Code(io.grpc.Status.Code) ImmutableMap(com.google.common.collect.ImmutableMap) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Aggregations

Code (io.grpc.Status.Code)7 Status (io.grpc.Status)3 Function (com.google.common.base.Function)2 ListenableFuture (com.google.common.util.concurrent.ListenableFuture)2 Executor (java.util.concurrent.Executor)2 Test (org.junit.Test)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 Iterators (com.google.common.collect.Iterators)1 Futures (com.google.common.util.concurrent.Futures)1 MoreExecutors (com.google.common.util.concurrent.MoreExecutors)1 MoreExecutors.directExecutor (com.google.common.util.concurrent.MoreExecutors.directExecutor)1 ByteString (com.google.protobuf.ByteString)1 Duration (com.google.protobuf.Duration)1 Compare (com.ibm.etcd.api.Compare)1 CompareResult (com.ibm.etcd.api.Compare.CompareResult)1 CompareTarget (com.ibm.etcd.api.Compare.CompareTarget)1 CompareOrBuilder (com.ibm.etcd.api.CompareOrBuilder)1 DeleteRangeRequest (com.ibm.etcd.api.DeleteRangeRequest)1