googleapis / googleapis/google-cloud-java

[java-spanner] RetrySettings for StreamingRead/StreamingSql

Ouverte
#12,263 1 commentaire 0 réactions 1 personne assignée Assignée à @rahul2393 Voir sur GitHub
api: spanner type: feature request
Langage dominant
Java
Étoiles
2.1k
Forks
1.2k
Merge moyen
1 j 23 h
PR mergées (30 j)
154

Description

Thanks for stopping by to let us know something could be better!

**Is your feature request related to a problem? Please describe.**
Recently I was working on fine tunning timeouts/retry settings for Spanner requests for one of applications.
I noticed that initRpcTimeout doesn't works on StreamingRead/StreamingSql type of requests.
So I started to go through source code and found that there are 3 places/configurations where I can work with timeouts:
- streamWaitTimeout property from GrpcCallContext which is used by WatchdogServerStreamingCallable to interrupt streaming request
- timeout property from GrpcCallContext which is used as source for 'grpc-timeout' header (if specified, otherwise totalTimeout from retrySettings is used)
- streamWatchdogCheckInterval from StubSettings which defines check interval for Watchdog used to interrupt streaming

First two aren't configurable from RetrySettings level.
Could you please makes them part of RetrySettings, so I don't have to interact with GrpcCallContext directly?

**Describe the solution you'd like**
Either to have separate set of properties in RetrySettings like (and recalculate them similarly to initRpcTimeout during retries):
```
var settings = RetrySettings.newBuilder()
.setStreamWaitTimeout(Duration.ofMillis(streamWaitTimeout))
.setSingleRequestTimeout(Duration.ofMillis(singleRequestTimeout)) // used as grpc-timeout
```
or reuse initRpcTimeout as streamWaitTimeout/grpc-timeout:
```
var settings = RetrySettings.newBuilder()
.setInitialRpcTimeout(Duration.ofMillis(initialRpcTimeout)) // used as both streamingWaitTimeout and grpc-timeout
```
**Describe alternatives you've considered**
Currently I interact with GrpcCallContext directly to set this values:
```
public static class SpannerGrpcCallContextConfigurator implements SpannerOptions.CallContextConfigurator {
public ApiCallContext configure(ApiCallContext context, ReqT request,
MethodDescriptor method) {
if (method == SpannerGrpc.getStreamingReadMethod()) {
return GrpcCallContext.createDefault().
.withTimeout(/*some timeout*/)
.withStreamWaitTimeout(/*some timeout*/);
}
return null;
}
}
```

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.