summaryrefslogtreecommitdiff
path: root/app/workers/stuck_ci_builds_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/stuck_ci_builds_worker.rb')
-rw-r--r--app/workers/stuck_ci_builds_worker.rb13
1 files changed, 11 insertions, 2 deletions
diff --git a/app/workers/stuck_ci_builds_worker.rb b/app/workers/stuck_ci_builds_worker.rb
index b9dac807b23..4eba311d063 100644
--- a/app/workers/stuck_ci_builds_worker.rb
+++ b/app/workers/stuck_ci_builds_worker.rb
@@ -7,7 +7,9 @@ class StuckCiBuildsWorker
BUILD_PENDING_STUCK_TIMEOUT = 1.hour
def perform
- Rails.logger.info 'Cleaning stuck builds'
+ return unless try_obtain_lease
+
+ Rails.logger.info "#{self.class}: Cleaning stuck builds"
drop :running, BUILD_RUNNING_OUTDATED_TIMEOUT
drop :pending, BUILD_PENDING_OUTDATED_TIMEOUT
@@ -16,6 +18,13 @@ class StuckCiBuildsWorker
private
+ def try_obtain_lease
+ Gitlab::ExclusiveLease.new(
+ 'stuck_ci_builds_worker_lease',
+ timeout: 30.minutes
+ ).try_obtain
+ end
+
def drop(status, timeout)
search(status, timeout) do |build|
drop_build :outdated, build, status, timeout
@@ -37,7 +46,7 @@ class StuckCiBuildsWorker
end
def drop_build(type, build, status, timeout)
- Rails.logger.info "#{self.class}: Dropping #{type.to_s} build #{build.id} for runner #{build.runner_id} (status: #{status}, timeout: #{timeout})"
+ Rails.logger.info "#{self.class}: Dropping #{type} build #{build.id} for runner #{build.runner_id} (status: #{status}, timeout: #{timeout})"
build.drop
end
end