From a65de9c2c1b8ea2d7dca3132ff0d72775f04bb78 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sun, 1 May 2016 00:38:53 -0700 Subject: [PATCH] Reduce delay in destroying a project from 1-minute to immediately Run ProjectDestroyWorker after pending_delete attribute has been committed to DB --- CHANGELOG | 1 + app/models/project.rb | 7 +++++++ app/services/projects/destroy_service.rb | 4 +--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 78d6c1ec2b2..e9b3e7b097d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ v 8.8.0 (unreleased) - Log to application.log when an admin starts and stops impersonating a user - Updated gitlab_git to 10.1.0 - GitAccess#protected_tag? no longer loads all tags just to check if a single one exists + - Reduce delay in destroying a project from 1-minute to immediately - Make build status canceled if any of the jobs was canceled and none failed - Upgrade Sidekiq to 4.1.2 - Sanitize repo paths in new project error message diff --git a/app/models/project.rb b/app/models/project.rb index 9403acf7759..dfd1e54ecf7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1039,4 +1039,11 @@ class Project < ActiveRecord::Base def wiki @wiki ||= ProjectWiki.new(self, self.owner) end + + def schedule_delete!(user_id, params) + # Queue this task for after the commit, so once we mark pending_delete it will run + run_after_commit { ProjectDestroyWorker.perform_async(id, user_id, params) } + + update_attribute(:pending_delete, true) + end end diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index df5054f08d7..19aab999e00 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -7,9 +7,7 @@ module Projects DELETED_FLAG = '+deleted' def pending_delete! - project.update_attribute(:pending_delete, true) - - ProjectDestroyWorker.perform_in(1.minute, project.id, current_user.id, params) + project.schedule_delete!(current_user.id, params) end def execute