Interface ApiCallContext (2.43.0)

publicinterfaceApiCallContextextendsRetryingContext

Context for an API call.

An API call can be composed of many RPCs (in case of retries). This class contains settings for both: API calls and RPCs.

Implementations need to be immutable because default instances are stored in callable objects.

This is transport specific and each transport has an implementation with its own options.

Methods

<T>getOption(ApiCallContext.Key<T> key)

publicabstractT<T>getOption(ApiCallContext.Key<T>key)

Beta

The surface for call context options is not stable yet and may change in the future.

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Return the api call context option set for this context.

Parameter
NameDescription
keyKey<T>
Returns
TypeDescription
T

<T>withOption(ApiCallContext.Key<T> key, T value)

publicabstractApiCallContext<T>withOption(ApiCallContext.Key<T>key,Tvalue)

Beta

The surface for call context options is not stable yet and may change in the future.

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Return a new ApiCallContext with additional option merged into the present instance. Any existing value of the key is overwritten.

Parameters
NameDescription
keyKey<T>
valueT
Returns
TypeDescription
ApiCallContext

getExtraHeaders()

publicabstractMap<String,List<String>>getExtraHeaders()

Beta

The surface for extra headers is not stable yet and may change in the future.

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Return the extra headers set for this context.

Returns
TypeDescription
Map<String,List<String>>

getStreamIdleTimeout()

publicabstractDurationgetStreamIdleTimeout()

The stream idle timeout set for this context.See Also:#withStreamIdleTimeout(Duration)

Returns
TypeDescription
org.threeten.bp.Duration

getStreamWaitTimeout()

publicabstractDurationgetStreamWaitTimeout()

Return the stream wait timeout set for this context.See Also:#withStreamWaitTimeout(Duration)

Returns
TypeDescription
org.threeten.bp.Duration

getTimeout()

publicabstractDurationgetTimeout()

Returns the configured per-RPC timeout.

Returns
TypeDescription
org.threeten.bp.Duration

getTracer()

publicabstractApiTracergetTracer()

Beta

The surface for tracing is not stable yet and may change in the future

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

TheApiTracer that was previously set for this context.

TheApiTracer will be used to trace the current operation and to annotate various events like retries.

Returns
TypeDescription
ApiTracer

merge(ApiCallContext inputCallContext)

publicabstractApiCallContextmerge(ApiCallContextinputCallContext)

For any values ininputCallContext that are not null, override the corresponding values in the present instance.

Parameter
NameDescription
inputCallContextApiCallContext
Returns
TypeDescription
ApiCallContext

nullToSelf(ApiCallContext inputContext)

publicabstractApiCallContextnullToSelf(ApiCallContextinputContext)

If inputContext is not null, returns it; if it is null, returns the present instance.

Parameter
NameDescription
inputContextApiCallContext
Returns
TypeDescription
ApiCallContext

withCredentials(Credentials credentials)

publicabstractApiCallContextwithCredentials(Credentialscredentials)

Returns a new ApiCallContext with the given credentials set.

Parameter
NameDescription
credentialscom.google.auth.Credentials
Returns
TypeDescription
ApiCallContext

withEndpointContext(EndpointContext endpointContext)

publicabstractApiCallContextwithEndpointContext(EndpointContextendpointContext)

Returns a new ApiCallContext with the given Endpoint Context.

Parameter
NameDescription
endpointContextEndpointContext
Returns
TypeDescription
ApiCallContext

withExtraHeaders(Map<String,List<String>> extraHeaders)

publicabstractApiCallContextwithExtraHeaders(Map<String,List<String>>extraHeaders)

Beta

The surface for extra headers is not stable yet and may change in the future.

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Return a new ApiCallContext with the extraHeaders merged into the present instance.

Parameter
NameDescription
extraHeadersMap<String,List<String>>
Returns
TypeDescription
ApiCallContext

withRetrySettings(RetrySettings retrySettings)

publicabstractApiCallContextwithRetrySettings(RetrySettingsretrySettings)

Beta

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Returns a new ApiCallContext with the givenRetrySettings set.

This sets theRetrySettings to use for the RPC. These settings will work in combination with either the default retryable codes for the RPC, or the retryable codes supplied through#withRetryableCodes(Set). Calling#withRetrySettings(RetrySettings) on an RPC that does not includeCode#DEADLINE_EXCEEDED as one of its retryable codes (or without calling#withRetryableCodes(Set) with a set that includes at leastCode#DEADLINE_EXCEEDED) will effectively only set a single timeout that is equal toRetrySettings#getInitialRpcTimeout(). If this timeout is exceeded, the RPC will not be retried and will fail withCode#DEADLINE_EXCEEDED.

Example usage:

ApiCallContextcontext=GrpcCallContext.createDefault().withRetrySettings(RetrySettings.newBuilder().setInitialRetryDelay(Duration.ofMillis(10L)).setInitialRpcTimeout(Duration.ofMillis(100L)).setMaxAttempts(10).setMaxRetryDelay(Duration.ofSeconds(10L)).setMaxRpcTimeout(Duration.ofSeconds(30L)).setRetryDelayMultiplier(1.4).setRpcTimeoutMultiplier(1.5).setTotalTimeout(Duration.ofMinutes(10L)).build()).withRetryableCodes(Sets.newSet(StatusCode.Code.UNAVAILABLE,StatusCode.Code.DEADLINE_EXCEEDED));

Setting a logical call timeout for the context can be done similarly withRetrySettings.Builder#setLogicalTimeout(Duration timeout).

Example usage:

ApiCallContextcontext=GrpcCallContext.createDefault().withRetrySettings(RetrySettings.newBuilder().setInitialRetryDelay(Duration.ofMillis(10L)).setMaxRetryDelay(Duration.ofSeconds(10L)).setRetryDelayMultiplier(1.4).setMaxAttempts(10).setLogicalTimeout(Duration.ofSeconds(30L)).build());
Parameter
NameDescription
retrySettingsRetrySettings
Returns
TypeDescription
ApiCallContext

withRetryableCodes(Set<StatusCode.Code> retryableCodes)

publicabstractApiCallContextwithRetryableCodes(Set<StatusCode.Code>retryableCodes)

Beta

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Returns a new ApiCallContext with the given retryable codes set.

This sets the retryable codes to use for the RPC. These settings will work in combination with either the defaultRetrySettings for the RPC, or theRetrySettings supplied through#withRetrySettings(RetrySettings).

Setting a non-empty set of retryable codes for an RPC that is not already retryable by default, will not have any effect and the RPC will NOT be retried. This option can only be used to change which codes are considered retryable for an RPC that already has at least one retryable code in its default settings.

Parameter
NameDescription
retryableCodesSet<Code>
Returns
TypeDescription
ApiCallContext

withStreamIdleTimeout(Duration streamIdleTimeout)

publicabstractApiCallContextwithStreamIdleTimeout(DurationstreamIdleTimeout)

Returns a new ApiCallContext with the given stream idle timeout set.

This timeout only applies to aServerStreamingCallables. It limits the maximum amount of timeout that can pass between a message being received byResponseObserver#onResponse(Object) and demand being signaled viaStreamController#request(int). Please note that this timeout is best effort and the maximum resolution configured inStubSettings#getStreamWatchdogCheckInterval(). This is useful to clean up streams that were partially read but never closed. When the timeout has been reached, the stream will be closed with a nonretryableWatchdogTimeoutException and a status ofStatusCode.Code#ABORTED.

A value ofDuration#ZERO, disables the streaming idle timeout and a null value will use the default in the callable.

Please note that this timeout is best effort and the maximum resolution is configured inStubSettings#getStreamWatchdogCheckInterval().

Parameter
NameDescription
streamIdleTimeoutorg.threeten.bp.Duration
Returns
TypeDescription
ApiCallContext

withStreamWaitTimeout(Duration streamWaitTimeout)

publicabstractApiCallContextwithStreamWaitTimeout(DurationstreamWaitTimeout)

Returns a new ApiCallContext with the given stream timeout set.

This timeout only applies to aServerStreamingCallables. It limits the maximum amount of time that can pass between demand being signaled viaStreamController#request(int) and actual message delivery toResponseObserver#onResponse(Object). Or, in the case of automatic flow control, since the last message was delivered toResponseObserver#onResponse(Object). This is useful to detect server or connection stalls. When the timeout has been reached, the stream will be closed with a retryableWatchdogTimeoutException and a status ofStatusCode.Code#ABORTED.

A value ofDuration#ZERO, disables the streaming wait timeout and a null value will use the default in the callable.

Please note that this timeout is best effort and the maximum resolution is configured inStubSettings#getStreamWatchdogCheckInterval().

Parameter
NameDescription
streamWaitTimeoutorg.threeten.bp.Duration
Returns
TypeDescription
ApiCallContext

withTimeout(Duration timeout)

publicabstractApiCallContextwithTimeout(Durationtimeout)

Returns a new ApiCallContext with the given timeout set.

This sets the maximum amount of time a single unary RPC attempt can take. If retries are enabled, then this can take much longer, as each RPC attempt will have the same constant timeout. Unlike a deadline, timeouts are relative durations that are measure from the beginning of each RPC attempt. Please note that this limits the duration of a server streaming RPC as well.

If a method has defaultcom.google.api.gax.retrying.RetrySettings, the max attempts and/or total timeout is still respected when scheduling each RPC attempt.

Parameter
NameDescription
timeoutorg.threeten.bp.Duration
Returns
TypeDescription
ApiCallContext

withTracer(ApiTracer tracer)

publicabstractApiCallContextwithTracer(ApiTracertracer)

Beta

The surface for tracing is not stable yet and may change in the future

This feature is covered by thePre-GA Offerings Terms of the Terms of Service. Pre-GA libraries might have limited support, and changes to pre-GA libraries might not be compatible with other pre-GA versions. For more information, see the launch stage descriptions.

Returns a newApiCallContext with the givenApiTracer.

TheApiTracer will be used to trace the current operation and to annotate various events like retries.

Parameter
NameDescription
tracerApiTracer

theApiTracer to set.

Returns
TypeDescription
ApiCallContext

withTransportChannel(TransportChannel channel)

publicabstractApiCallContextwithTransportChannel(TransportChannelchannel)

Returns a new ApiCallContext with the given channel set.

Parameter
NameDescription
channelTransportChannel
Returns
TypeDescription
ApiCallContext

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-17 UTC.