Commit a4fa7ac2 authored by Fabio Pitino's avatar Fabio Pitino

Merge branch 'ci-prevent-retry-of-quota-droppped-builds-323486' into 'master'

Prevent autoretry of dropped builds because of quota exhaustion

See merge request gitlab-org/gitlab!61476
parents 00696528 e2aa56ad
...@@ -7,6 +7,11 @@ class Gitlab::Ci::Build::AutoRetry ...@@ -7,6 +7,11 @@ class Gitlab::Ci::Build::AutoRetry
scheduler_failure: 2 scheduler_failure: 2
}.freeze }.freeze
RETRY_OVERRIDES = {
ci_quota_exceeded: 0,
no_matching_runner: 0
}.freeze
def initialize(build) def initialize(build)
@build = build @build = build
end end
...@@ -19,13 +24,18 @@ class Gitlab::Ci::Build::AutoRetry ...@@ -19,13 +24,18 @@ class Gitlab::Ci::Build::AutoRetry
private private
delegate :failure_reason, to: :@build
def within_max_retry_limit? def within_max_retry_limit?
max_allowed_retries > 0 && max_allowed_retries > @build.retries_count max_allowed_retries > 0 && max_allowed_retries > @build.retries_count
end end
def max_allowed_retries def max_allowed_retries
strong_memoize(:max_allowed_retries) do strong_memoize(:max_allowed_retries) do
options_retry_max || DEFAULT_RETRIES.fetch(@build.failure_reason.to_sym, 0) RETRY_OVERRIDES[failure_reason.to_sym] ||
options_retry_max ||
DEFAULT_RETRIES[failure_reason.to_sym] ||
0
end end
end end
...@@ -38,7 +48,7 @@ class Gitlab::Ci::Build::AutoRetry ...@@ -38,7 +48,7 @@ class Gitlab::Ci::Build::AutoRetry
end end
def retry_on_reason_or_always? def retry_on_reason_or_always?
options_retry_when.include?(@build.failure_reason.to_s) || options_retry_when.include?(failure_reason.to_s) ||
options_retry_when.include?('always') options_retry_when.include?('always')
end end
......
...@@ -8,7 +8,7 @@ RSpec.describe Gitlab::Ci::Build::AutoRetry do ...@@ -8,7 +8,7 @@ RSpec.describe Gitlab::Ci::Build::AutoRetry do
describe '#allowed?' do describe '#allowed?' do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax
let(:build) { create(:ci_build) } let(:build) { build_stubbed(:ci_build) }
subject { auto_retry.allowed? } subject { auto_retry.allowed? }
...@@ -22,6 +22,8 @@ RSpec.describe Gitlab::Ci::Build::AutoRetry do ...@@ -22,6 +22,8 @@ RSpec.describe Gitlab::Ci::Build::AutoRetry do
"not matching reason" | 0 | { when: %w[script_error], max: 2 } | :api_failure | false "not matching reason" | 0 | { when: %w[script_error], max: 2 } | :api_failure | false
"scheduler failure override" | 1 | { when: %w[scheduler_failure], max: 1 } | :scheduler_failure | false "scheduler failure override" | 1 | { when: %w[scheduler_failure], max: 1 } | :scheduler_failure | false
"default for scheduler failure" | 1 | {} | :scheduler_failure | true "default for scheduler failure" | 1 | {} | :scheduler_failure | true
"quota is exceeded" | 0 | { max: 2 } | :ci_quota_exceeded | false
"no matching runner" | 0 | { max: 2 } | :no_matching_runner | false
end end
with_them do with_them do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment