Skip to content

Commit c575049

Browse files
authored
feat(core): Add support for retry options to be configurable (#9426)
1 parent 91ae8ff commit c575049

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

google-apis-core/lib/google/apis/core/http_command.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,9 @@ def execute(client)
101101
begin
102102
Retriable.retriable tries: options.retries + 1,
103103
max_elapsed_time: options.max_elapsed_time,
104-
base_interval: 1,
105-
multiplier: 2,
104+
base_interval: options.base_interval,
105+
max_interval: options.max_interval,
106+
multiplier: options.multiplier,
106107
on: RETRIABLE_ERRORS do |try|
107108
# This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
108109
# auth to be re-attempted without having to retry all sorts of other failures like

google-apis-core/lib/google/apis/options.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ module Apis
2929
:authorization,
3030
:retries,
3131
:max_elapsed_time,
32+
:base_interval,
33+
:max_interval,
34+
:multiplier,
3235
:header,
3336
:normalize_unicode,
3437
:skip_serialization,
@@ -69,6 +72,13 @@ class RequestOptions
6972
# @return [Fixnum] Number of times to retry requests on server error.
7073
# @!attribute [rw] max_elapsed_time
7174
# @return [Fixnum] Total time in seconds that requests are allowed to keep being retried.
75+
# @!attribute [rw] base_interval
76+
# @return [Float] The initial interval in seconds between tries.
77+
# @!attribute [rw] max_interval
78+
# @return [Fixnum] The maximum interval in seconds that any individual retry can reach.
79+
# @!attribute [rw] multiplier
80+
# @return [rw] Each successive interval grows by this factor. A multipler of 1.5 means the next interval
81+
# will be 1.5x the current interval.
7282
# @!attribute [rw] header
7383
# @return [Hash<String,String>] Additional HTTP headers to include in requests.
7484
# @!attribute [rw] normalize_unicode
@@ -110,6 +120,9 @@ def merge(options)
110120
ClientOptions.default.transparent_gzip_decompression = true
111121
RequestOptions.default.retries = 0
112122
RequestOptions.default.max_elapsed_time = 900
123+
RequestOptions.default.base_interval = 1
124+
RequestOptions.default.max_interval = 60
125+
RequestOptions.default.multiplier = 2
113126
RequestOptions.default.normalize_unicode = false
114127
RequestOptions.default.skip_serialization = false
115128
RequestOptions.default.skip_deserialization = false

google-apis-core/spec/google/apis/core/http_command_spec.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,9 @@ class DecryptResponse
152152
expect(Retriable).to receive(:retriable).with(
153153
tries: Google::Apis::RequestOptions.default.retries + 1,
154154
max_elapsed_time: Google::Apis::RequestOptions.default.max_elapsed_time,
155-
base_interval: 1,
156-
multiplier: 2,
155+
base_interval: Google::Apis::RequestOptions.default.base_interval,
156+
max_interval: Google::Apis::RequestOptions.default.max_interval,
157+
multiplier: Google::Apis::RequestOptions.default.multiplier,
157158
on: described_class::RETRIABLE_ERRORS).and_call_original
158159
allow(Retriable).to receive(:retriable).and_call_original
159160

google-apis-core/spec/google/apis/options_spec.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
it 'sets default values' do
4343
expect(defaults.retries).to eq(5) # Overriden in spec_helper.rb
4444
expect(defaults.max_elapsed_time).to eq(900)
45+
expect(defaults.base_interval).to eq(1)
46+
expect(defaults.max_interval).to eq(60)
47+
expect(defaults.multiplier).to eq(2)
4548
expect(defaults.normalize_unicode).to be false
4649
expect(defaults.skip_serialization).to be false
4750
expect(defaults.skip_deserialization).to be false

0 commit comments

Comments
 (0)