Skip to content

Commit 228fead

Browse files
committed
Support gRPC connection options for retry and timeout
1 parent f4dd450 commit 228fead

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

doc/source/using_config.rst

+26
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ toplevel of your configuration file, like so:
154154
access-token-reload-interval: 60
155155
connection-config:
156156
keepalive-time: 60
157+
retry-limit: 4
158+
retry-delay: 1000
159+
request-timeout: 300
157160
158161
159162
Attributes
@@ -789,6 +792,9 @@ The ``connection-config`` block looks like this:
789792
790793
connection-config:
791794
keepalive-time: 60
795+
retry-limit: 4
796+
retry-delay: 1000
797+
request-timeout: 300
792798
793799
794800
Attributes
@@ -799,6 +805,20 @@ Attributes
799805
The interval in seconds between gRPC PING frames. Disabled by default.
800806
`gRPC keepalive guide <https://grpc.io/docs/guides/keepalive/>`_
801807

808+
* ``retry-limit``
809+
810+
The maximum number of retries, not including the original request.
811+
812+
* ``retry-delay``
813+
814+
The initial backoff in milliseconds for retries.
815+
`gRPC retry guide <https://grpc.io/docs/guides/retry/>`_
816+
817+
* ``request-timeout``
818+
819+
The timeout for gRPC requests in seconds. No timeout by default.
820+
`gRPC deadline guide <https://grpc.io/docs/guides/deadlines/>`_
821+
802822

803823
.. _config_cache_servers:
804824

@@ -841,6 +861,9 @@ Cache server configuration is declared in the following way:
841861
client-key: client.key
842862
connection-config:
843863
keepalive-time: 60
864+
retry-limit: 4
865+
retry-delay: 1000
866+
request-timeout: 300
844867
845868
846869
Attributes
@@ -1167,6 +1190,9 @@ which looks like this:
11671190
client-key: /keys/client.key
11681191
connection-config:
11691192
keepalive-time: 60
1193+
retry-limit: 4
1194+
retry-delay: 1000
1195+
request-timeout: 300
11701196
11711197
**Attributes:**
11721198

src/buildstream/_cas/casdprocessmanager.py

+6
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ def __init__(
121121
)
122122
if remote_cache_spec.keepalive_time is not None:
123123
casd_args.append("--cas-keepalive-time={}".format(remote_cache_spec.keepalive_time))
124+
if remote_cache_spec.retry_limit is not None:
125+
casd_args.append("--cas-retry-limit={}".format(remote_cache_spec.retry_limit))
126+
if remote_cache_spec.retry_delay is not None:
127+
casd_args.append("--cas-retry-delay={}".format(remote_cache_spec.retry_delay))
128+
if remote_cache_spec.request_timeout is not None:
129+
casd_args.append("--cas-request-timeout={}".format(remote_cache_spec.request_timeout))
124130

125131
casd_args.append(path)
126132

src/buildstream/_remotespec.py

+33
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ def __hash__(self) -> int:
140140
self.access_token_file,
141141
self.access_token_reload_interval,
142142
self.keepalive_time,
143+
self.retry_limit,
144+
self.retry_delay,
145+
self.request_timeout,
143146
)
144147
)
145148

@@ -195,6 +198,30 @@ def keepalive_time(self) -> Optional[int]:
195198
return self._connection_config.get_int("keepalive-time", None)
196199
return None
197200

201+
# grpc retry limit
202+
#
203+
@property
204+
def retry_limit(self) -> Optional[int]:
205+
if self._connection_config:
206+
return self._connection_config.get_int("retry-limit", None)
207+
return None
208+
209+
# grpc retry delay in milliseconds
210+
#
211+
@property
212+
def retry_delay(self) -> Optional[int]:
213+
if self._connection_config:
214+
return self._connection_config.get_int("retry-delay", None)
215+
return None
216+
217+
# grpc request timeout in seconds
218+
#
219+
@property
220+
def request_timeout(self) -> Optional[int]:
221+
if self._connection_config:
222+
return self._connection_config.get_int("request-timeout", None)
223+
return None
224+
198225
# open_channel()
199226
#
200227
# Opens a gRPC channel based on this spec.
@@ -234,6 +261,12 @@ def to_localcas_remote(self, remote):
234261
remote.access_token_reload_interval.FromSeconds(self.access_token_reload_interval * 60)
235262
if self.keepalive_time is not None:
236263
remote.keepalive_time.FromSeconds(self.keepalive_time)
264+
if self.retry_limit is not None:
265+
remote.retry_limit = self.retry_limit
266+
if self.retry_delay is not None:
267+
remote.retry_delay.FromMilliseconds(self.retry_delay)
268+
if self.request_timeout is not None:
269+
remote.request_timeout.FromSeconds(self.request_timeout)
237270

238271
# new_from_node():
239272
#

0 commit comments

Comments
 (0)