diff --git a/changelogs/unreleased/sh-fix-grpc-timeouts-backup.yml b/changelogs/unreleased/sh-fix-grpc-timeouts-backup.yml new file mode 100644 index 00000000000..41cd6e93d0f --- /dev/null +++ b/changelogs/unreleased/sh-fix-grpc-timeouts-backup.yml @@ -0,0 +1,5 @@ +--- +title: Extend gRPC timeouts for Rake tasks +merge_request: 19461 +author: +type: fixed diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb index 9e3af00e00d..5b47853b9c1 100644 --- a/lib/gitlab/gitaly_client.rb +++ b/lib/gitlab/gitaly_client.rb @@ -383,13 +383,17 @@ module Gitlab end def self.long_timeout - if Sidekiq.server? - 6.hours - else + if web_app_server? default_timeout + else + 6.hours end end + def self.web_app_server? + defined?(::Unicorn) || defined?(::Puma) + end + def self.storage_metadata_file_path(storage) Gitlab::GitalyClient::StorageSettings.allow_disk_access do File.join( diff --git a/spec/lib/gitlab/gitaly_client_spec.rb b/spec/lib/gitlab/gitaly_client_spec.rb index 67fe89f3fbe..43df8a263a2 100644 --- a/spec/lib/gitlab/gitaly_client_spec.rb +++ b/spec/lib/gitlab/gitaly_client_spec.rb @@ -17,6 +17,28 @@ describe Gitlab::GitalyClient do }) end + describe '.long_timeout' do + context 'default case' do + it { expect(subject.long_timeout).to eq(6.hours) } + end + + context 'running in Unicorn' do + before do + stub_const('Unicorn', 1) + end + + it { expect(subject.long_timeout).to eq(55) } + end + + context 'running in Puma' do + before do + stub_const('Puma', 1) + end + + it { expect(subject.long_timeout).to eq(55) } + end + end + describe '.filesystem_id_from_disk' do it 'catches errors' do [Errno::ENOENT, Errno::EACCES, JSON::ParserError].each do |error|