diff options
author | Douwe Maan <douwe@selenight.nl> | 2016-03-15 23:24:06 +0100 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2016-03-15 23:24:06 +0100 |
commit | ecfa6cd75bc0f1e003928f07f30446003a0f9875 (patch) | |
tree | 6e4212708c362c0d4e086068fe6de9ead695bf80 /app/services/projects/housekeeping_service.rb | |
parent | 7ae573c75ac51413c04249f77ed8ca4e144b7549 (diff) | |
parent | a80b49ba1ac8ab54fd130ed889ecfbd0dccf81af (diff) | |
download | gitlab-ce-ecfa6cd75bc0f1e003928f07f30446003a0f9875.tar.gz |
Merge branch 'master' into git-2-7-3
Diffstat (limited to 'app/services/projects/housekeeping_service.rb')
-rw-r--r-- | app/services/projects/housekeeping_service.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/app/services/projects/housekeeping_service.rb b/app/services/projects/housekeeping_service.rb index 0db85ac2142..bccd67d3dbf 100644 --- a/app/services/projects/housekeeping_service.rb +++ b/app/services/projects/housekeeping_service.rb @@ -9,12 +9,39 @@ module Projects class HousekeepingService < BaseService include Gitlab::ShellAdapter + LEASE_TIMEOUT = 3600 + + class LeaseTaken < StandardError + def to_s + "Somebody already triggered housekeeping for this project in the past #{LEASE_TIMEOUT / 60} minutes" + end + end + def initialize(project) @project = project end def execute + raise LeaseTaken if !try_obtain_lease + GitlabShellWorker.perform_async(:gc, @project.path_with_namespace) + ensure + @project.update_column(:pushes_since_gc, 0) + end + + def needed? + @project.pushes_since_gc >= 10 + end + + def increment! + @project.increment!(:pushes_since_gc) + end + + private + + def try_obtain_lease + lease = ::Gitlab::ExclusiveLease.new("project_housekeeping:#{@project.id}", timeout: LEASE_TIMEOUT) + lease.try_obtain end end end |