Skip to content

Commit 241361e

Browse files
authored
fix(core): Support for max elapsed time configuration.
1 parent b14bede commit 241361e

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ def execute(client)
100100
opencensus_begin_span
101101
begin
102102
Retriable.retriable tries: options.retries + 1,
103+
max_elapsed_time: options.max_elapsed_time,
103104
base_interval: 1,
104105
multiplier: 2,
105106
on: RETRIABLE_ERRORS do |try|

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module Apis
2828
RequestOptions = Struct.new(
2929
:authorization,
3030
:retries,
31+
:max_elapsed_time,
3132
:header,
3233
:normalize_unicode,
3334
:skip_serialization,
@@ -66,6 +67,8 @@ class RequestOptions
6667
# @return [Signet::OAuth2::Client, #apply(Hash)] OAuth2 credentials.
6768
# @!attribute [rw] retries
6869
# @return [Fixnum] Number of times to retry requests on server error.
70+
# @!attribute [rw] max_elapsed_time
71+
# @return [Fixnum] Total time in seconds that requests are allowed to keep being retried.
6972
# @!attribute [rw] header
7073
# @return [Hash<String,String>] Additional HTTP headers to include in requests.
7174
# @!attribute [rw] normalize_unicode
@@ -106,6 +109,7 @@ def merge(options)
106109
ClientOptions.default.application_version = '0.0.0'
107110
ClientOptions.default.transparent_gzip_decompression = true
108111
RequestOptions.default.retries = 0
112+
RequestOptions.default.max_elapsed_time = 900
109113
RequestOptions.default.normalize_unicode = false
110114
RequestOptions.default.skip_serialization = false
111115
RequestOptions.default.skip_deserialization = false

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ class DecryptResponse
147147
it 'should call block if present' do
148148
expect { |b| command.execute(client, &b) }.to yield_with_args('Hello world', nil)
149149
end
150+
151+
it 'should retry with max elapsed_time and retries' do
152+
expect(Retriable).to receive(:retriable).with(
153+
tries: Google::Apis::RequestOptions.default.retries + 1,
154+
max_elapsed_time: Google::Apis::RequestOptions.default.max_elapsed_time,
155+
base_interval: 1,
156+
multiplier: 2,
157+
on: described_class::RETRIABLE_ERRORS).and_call_original
158+
allow(Retriable).to receive(:retriable).and_call_original
159+
160+
command.execute(client)
161+
end
150162
end
151163

152164
context('with server errors') do

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
RSpec.describe Google::Apis::RequestOptions do
1919
let(:options) { Google::Apis::RequestOptions.new }
20+
let(:defaults) { described_class.default }
2021

2122
it 'should not merge nil values' do
2223
options.retries = 1
@@ -37,4 +38,15 @@
3738
it 'should allow nil in merge' do
3839
expect(options.merge(nil)).to be_an_instance_of(Google::Apis::RequestOptions)
3940
end
41+
42+
it 'sets default values' do
43+
expect(defaults.retries).to eq(5) # Overriden in spec_helper.rb
44+
expect(defaults.max_elapsed_time).to eq(900)
45+
expect(defaults.normalize_unicode).to be false
46+
expect(defaults.skip_serialization).to be false
47+
expect(defaults.skip_deserialization).to be false
48+
expect(defaults.api_format_version).to be nil
49+
expect(defaults.use_opencensus).to be true
50+
expect(defaults.quota_project).to be_nil
51+
end
4052
end

0 commit comments

Comments
 (0)