summaryrefslogtreecommitdiff
path: root/app
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
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')
-rw-r--r--app/services/projects/destroy_service.rb9
-rw-r--r--app/workers/project_destroy_worker.rb3
2 files changed, 8 insertions, 4 deletions
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb
index e2b2660ea71..682407ac896 100644
--- a/app/services/projects/destroy_service.rb
+++ b/app/services/projects/destroy_service.rb
@@ -26,9 +26,6 @@ module Projects
Projects::UnlinkForkService.new(project, current_user).execute
Project.transaction do
- project.team.truncate
- project.destroy!
-
unless remove_legacy_registry_tags
raise_error('Failed to remove some tags in project container registry. Please try again or contact administrator.')
end
@@ -40,10 +37,14 @@ module Projects
unless remove_repository(wiki_path)
raise_error('Failed to remove wiki repository. Please try again or contact administrator.')
end
+
+ project.team.truncate
+ project.destroy!
end
- log_info("Project \"#{project.path_with_namespace}\" was removed")
system_hook_service.execute_hooks_for(project, :destroy)
+
+ log_info("Project \"#{project.path_with_namespace}\" was removed")
true
end
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