summaryrefslogtreecommitdiff
path: root/app/workers/project_destroy_worker.rb
diff options
context:
space:
mode:
authorTimothy Andrew <mail@timothyandrew.net>2017-04-28 06:46:15 +0000
committerTiago Botelho <tiagonbotelho@hotmail.com>2017-07-20 09:56:52 +0100
commit72a85ae9ac2468b099a565d3848bf8e0dcdf4499 (patch)
tree9d95fe450c896cb4b80b19fd247eb5660fde2a2b /app/workers/project_destroy_worker.rb
parent445cd22c72ca6fbfdcf18d67fa859c4b5b9e2a6c (diff)
downloadgitlab-ce-72a85ae9ac2468b099a565d3848bf8e0dcdf4499.tar.gz
Handle errors while a project is being deleted asynchronously.
1. Rescue all errors that `Projects::DestroyService` might throw, to prevent the worker from leaving things in an inconsistent state 2. Unmark the project as `pending_delete` 3. Add a `delete_error` text column to `projects`, and save the error message in there, to be shown to the project masters/owners.
Diffstat (limited to 'app/workers/project_destroy_worker.rb')
-rw-r--r--app/workers/project_destroy_worker.rb3
1 files changed, 3 insertions, 0 deletions
diff --git a/app/workers/project_destroy_worker.rb b/app/workers/project_destroy_worker.rb
index b462327490e..482e1e38cd1 100644
--- a/app/workers/project_destroy_worker.rb
+++ b/app/workers/project_destroy_worker.rb
@@ -12,5 +12,8 @@ class ProjectDestroyWorker
user = User.find(user_id)
::Projects::DestroyService.new(project, user, params.symbolize_keys).execute
+ rescue StandardError => error
+ project.assign_attributes(delete_error: error.message, pending_delete: false)
+ project.save!(validate: false)
end
end