summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaco Guzman <pacoguzmanp@gmail.com>2016-07-05 10:03:08 +0200
committerPaco Guzman <pacoguzmanp@gmail.com>2016-07-05 10:09:47 +0200
commitd91c6c0738086f4ff8f99fabb78efd90bed990a0 (patch)
tree9f172ef3ad1ed73b076ac3771fbb19e966998907
parentba9ef7f3935cfaa42fcdb2317567cc383c7e9c22 (diff)
downloadgitlab-ce-15094-throttling-pushes_since_gc.tar.gz
Throttle the update of `project.pushes_since_gc` to 1 minute15094-throttling-pushes_since_gc
-rw-r--r--CHANGELOG1
-rw-r--r--app/services/projects/housekeeping_service.rb10
2 files changed, 9 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4fac555e12a..573ab21a5e2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -23,6 +23,7 @@ v 8.10.0 (unreleased)
- API: Todos !3188 (Robert Schilling)
- Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
- PipelinesFinder uses git cache data
+ - Throttle the update of `project.pushes_since_gc` to 1 minute.
- Check for conflicts with existing Project's wiki path when creating a new project.
- Don't instantiate a git tree on Projects show default view
- Remove unused front-end variable -> default_issues_tracker
diff --git a/app/services/projects/housekeeping_service.rb b/app/services/projects/housekeeping_service.rb
index a47df22f1ba..752c11d7ae6 100644
--- a/app/services/projects/housekeeping_service.rb
+++ b/app/services/projects/housekeeping_service.rb
@@ -27,7 +27,7 @@ module Projects
GitlabShellOneShotWorker.perform_async(:gc, @project.repository_storage_path, @project.path_with_namespace)
ensure
Gitlab::Metrics.measure(:reset_pushes_since_gc) do
- @project.update_column(:pushes_since_gc, 0)
+ update_pushes_since_gc(0)
end
end
@@ -37,12 +37,18 @@ module Projects
def increment!
Gitlab::Metrics.measure(:increment_pushes_since_gc) do
- @project.increment!(:pushes_since_gc)
+ update_pushes_since_gc(@project.pushes_since_gc + 1)
end
end
private
+ def update_pushes_since_gc(new_value)
+ if Gitlab::ExclusiveLease.new("project_housekeeping:update_pushes_since_gc:#{project.id}", timeout: 60).try_obtain
+ @project.update_column(:pushes_since_gc, new_value)
+ end
+ end
+
def try_obtain_lease
Gitlab::Metrics.measure(:obtain_housekeeping_lease) do
lease = ::Gitlab::ExclusiveLease.new("project_housekeeping:#{@project.id}", timeout: LEASE_TIMEOUT)