diff options
| author | Douwe Maan <douwe@gitlab.com> | 2016-03-15 10:51:38 +0000 |
|---|---|---|
| committer | Douwe Maan <douwe@gitlab.com> | 2016-03-15 10:51:38 +0000 |
| commit | ea7d062fa60e3e622288237fc66a815348bbcf36 (patch) | |
| tree | 69957b37821b4593ed9e75c330a5c650150cd3c3 /app | |
| parent | be3a9440af7cedcf60dc1bb64c63f1786dc565bc (diff) | |
| parent | 30b36c92c386e93b432166fb6f9dd973882a6d82 (diff) | |
| download | gitlab-ce-ea7d062fa60e3e622288237fc66a815348bbcf36.tar.gz | |
Merge branch 'auto-gc' into 'master'
revert-01160fc0
Run 'git gc' every 10 pushes
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/14250
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/12620
Fixes https://gitlab.com/gitlab-org/gitlab-ee/issues/254
Associated gitlab-shell MR:
https://gitlab.com/gitlab-org/gitlab-shell/merge_requests/44
See merge request !3206
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/projects_controller.rb | 13 | ||||
| -rw-r--r-- | app/services/git_push_service.rb | 9 | ||||
| -rw-r--r-- | app/services/projects/housekeeping_service.rb | 27 |
3 files changed, 45 insertions, 4 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index c70add86a20..36f37221c58 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -172,10 +172,15 @@ class ProjectsController < ApplicationController def housekeeping ::Projects::HousekeepingService.new(@project).execute - respond_to do |format| - flash[:notice] = "Housekeeping successfully started." - format.html { redirect_to project_path(@project) } - end + redirect_to( + project_path(@project), + notice: "Housekeeping successfully started" + ) + rescue ::Projects::HousekeepingService::LeaseTaken => ex + redirect_to( + edit_project_path(@project), + alert: ex.to_s + ) end def toggle_star diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index bd31a617747..4313de0ccab 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -49,6 +49,8 @@ class GitPushService < BaseService # Update merge requests that may be affected by this push. A new branch # could cause the last commit of a merge request to change. update_merge_requests + + perform_housekeeping end def update_main_language @@ -73,6 +75,13 @@ class GitPushService < BaseService ProjectCacheWorker.perform_async(@project.id) end + def perform_housekeeping + housekeeping = Projects::HousekeepingService.new(@project) + housekeeping.increment! + housekeeping.execute if housekeeping.needed? + rescue Projects::HousekeepingService::LeaseTaken + end + def process_default_branch @push_commits = project.repository.commits(params[:newrev]) 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 |
