googleapis / googleapis/google-cloud-java

[java-spanner] RetrySettings for StreamingRead/StreamingSql

オープン
#12,263 コメント 1 件 リアクション 0 件 担当者 1 名 @rahul2393 に割り当て済み GitHub で見る
api: spanner type: feature request
主要言語
Java
スター
2.1k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
154

説明

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;
}
}
```

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。