Commit 48a77e0f authored by drew cimino's avatar drew cimino

Feature flag for expire artifacts loop limit

parent 9fa56075
...@@ -8,13 +8,15 @@ module Ci ...@@ -8,13 +8,15 @@ module Ci
BATCH_SIZE = 100 BATCH_SIZE = 100
LOOP_TIMEOUT = 5.minutes LOOP_TIMEOUT = 5.minutes
LOOP_LIMIT = 1000 SMALL_LOOP_LIMIT = 10
LARGE_LOOP_LIMIT = 100
EXCLUSIVE_LOCK_KEY = 'expired_job_artifacts:destroy:lock' EXCLUSIVE_LOCK_KEY = 'expired_job_artifacts:destroy:lock'
LOCK_TIMEOUT = 6.minutes LOCK_TIMEOUT = 6.minutes
def initialize def initialize
@removed_artifacts_count = 0 @removed_artifacts_count = 0
@start_at = Time.current @start_at = Time.current
@loop_limit = ::Feature.enabled?(:ci_artifact_fast_removal_large_loop_limit, default_enabled: :yaml) ? LARGE_LOOP_LIMIT : SMALL_LOOP_LIMIT
end end
## ##
...@@ -38,7 +40,7 @@ module Ci ...@@ -38,7 +40,7 @@ module Ci
private private
def destroy_unlocked_job_artifacts def destroy_unlocked_job_artifacts
loop_until(timeout: LOOP_TIMEOUT, limit: LOOP_LIMIT) do loop_until(timeout: LOOP_TIMEOUT, limit: @loop_limit) do
artifacts = Ci::JobArtifact.expired_before(@start_at).artifact_unlocked.limit(BATCH_SIZE) artifacts = Ci::JobArtifact.expired_before(@start_at).artifact_unlocked.limit(BATCH_SIZE)
service_response = destroy_batch(artifacts) service_response = destroy_batch(artifacts)
@removed_artifacts_count += service_response[:destroyed_artifacts_count] @removed_artifacts_count += service_response[:destroyed_artifacts_count]
...@@ -55,7 +57,7 @@ module Ci ...@@ -55,7 +57,7 @@ module Ci
@removed_artifacts_count += service_response[:destroyed_artifacts_count] @removed_artifacts_count += service_response[:destroyed_artifacts_count]
break if loop_timeout? break if loop_timeout?
break if index >= LOOP_LIMIT break if index >= @loop_limit
end end
end end
......
---
name: ci_artifact_fast_removal_large_loop_limit
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/76504
rollout_issue_url:
milestone: '14.6'
type: development
group: group::pipeline execution
default_enabled: false
...@@ -20,7 +20,7 @@ RSpec.describe Ci::JobArtifacts::DestroyAllExpiredService, :clean_gitlab_redis_s ...@@ -20,7 +20,7 @@ RSpec.describe Ci::JobArtifacts::DestroyAllExpiredService, :clean_gitlab_redis_s
context 'with preloaded relationships' do context 'with preloaded relationships' do
before do before do
stub_const("#{described_class}::LOOP_LIMIT", 1) stub_const("#{described_class}::LARGE_LOOP_LIMIT", 1)
end end
context 'with ci_destroy_unlocked_job_artifacts feature flag disabled' do context 'with ci_destroy_unlocked_job_artifacts feature flag disabled' do
...@@ -119,7 +119,7 @@ RSpec.describe Ci::JobArtifacts::DestroyAllExpiredService, :clean_gitlab_redis_s ...@@ -119,7 +119,7 @@ RSpec.describe Ci::JobArtifacts::DestroyAllExpiredService, :clean_gitlab_redis_s
let!(:artifact) { create(:ci_job_artifact, :expired, job: job, locked: job.pipeline.locked) } let!(:artifact) { create(:ci_job_artifact, :expired, job: job, locked: job.pipeline.locked) }
before do before do
stub_const("#{described_class}::LOOP_LIMIT", 10) stub_const("#{described_class}::LARGE_LOOP_LIMIT", 10)
end end
context 'when the import fails' do context 'when the import fails' do
...@@ -189,7 +189,8 @@ RSpec.describe Ci::JobArtifacts::DestroyAllExpiredService, :clean_gitlab_redis_s ...@@ -189,7 +189,8 @@ RSpec.describe Ci::JobArtifacts::DestroyAllExpiredService, :clean_gitlab_redis_s
context 'when loop reached loop limit' do context 'when loop reached loop limit' do
before do before do
stub_const("#{described_class}::LOOP_LIMIT", 1) stub_feature_flags(ci_artifact_fast_removal_large_loop_limit: false)
stub_const("#{described_class}::SMALL_LOOP_LIMIT", 1)
end end
it 'destroys one artifact' do it 'destroys one artifact' 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