Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb')
-rw-r--r--lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb25
1 files changed, 17 insertions, 8 deletions
diff --git a/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb b/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb
index 1c0dfbdbee3..f637001f9f8 100644
--- a/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb
+++ b/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb
@@ -7,15 +7,19 @@ module Gitlab
class CancelPendingPipelines < Chain::Base
include Chain::Helpers
+ BATCH_SIZE = 25
+
+ # rubocop: disable CodeReuse/ActiveRecord
def perform!
return unless project.auto_cancel_pending_pipelines?
Gitlab::OptimisticLocking.retry_lock(auto_cancelable_pipelines, name: 'cancel_pending_pipelines') do |cancelables|
- cancelables.find_each do |cancelable|
- cancelable.auto_cancel_running(pipeline)
+ cancelables.select(:id).each_batch(of: BATCH_SIZE) do |cancelables_batch|
+ auto_cancel_interruptible_pipelines(cancelables_batch.ids)
end
end
end
+ # rubocop: enable CodeReuse/ActiveRecord
def break?
false
@@ -23,16 +27,21 @@ module Gitlab
private
- # rubocop: disable CodeReuse/ActiveRecord
def auto_cancelable_pipelines
- project.all_pipelines.ci_and_parent_sources
- .where(ref: pipeline.ref)
- .where.not(id: pipeline.same_family_pipeline_ids)
- .where.not(sha: project.commit(pipeline.ref).try(:id))
+ project.all_pipelines.created_after(1.week.ago)
+ .ci_and_parent_sources
+ .for_ref(pipeline.ref)
+ .id_not_in(pipeline.same_family_pipeline_ids)
+ .where_not_sha(project.commit(pipeline.ref).try(:id))
.alive_or_scheduled
+ end
+
+ def auto_cancel_interruptible_pipelines(pipeline_ids)
+ ::Ci::Pipeline
+ .id_in(pipeline_ids)
.with_only_interruptible_builds
+ .each { |cancelable| cancelable.auto_cancel_running(pipeline) }
end
- # rubocop: enable CodeReuse/ActiveRecord
end
end
end