summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Botelho <tiagonbotelho@hotmail.com>2017-07-06 14:43:07 +0100
committerTiago Botelho <tiagonbotelho@hotmail.com>2017-07-20 09:59:56 +0100
commit0aa8249e484ca97cfc28c7301d69077919032c08 (patch)
tree347640b916c5064d014bb34fe54dafa1230191ca
parent3491b19a4e67a9f439c12afac45ef38f3fce0ef5 (diff)
downloadgitlab-ce-0aa8249e484ca97cfc28c7301d69077919032c08.tar.gz
Refactors Project Destroy service and worker code
-rw-r--r--app/services/projects/destroy_service.rb42
-rw-r--r--app/workers/project_destroy_worker.rb7
2 files changed, 28 insertions, 21 deletions
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb
index 7b0a08af290..7e38aacc91a 100644
--- a/app/services/projects/destroy_service.rb
+++ b/app/services/projects/destroy_service.rb
@@ -25,27 +25,15 @@ module Projects
Projects::UnlinkForkService.new(project, current_user).execute
- Project.transaction do
- unless remove_legacy_registry_tags
- raise_error('Failed to remove some tags in project container registry. Please try again or contact administrator.')
- end
-
- unless remove_repository(repo_path)
- raise_error('Failed to remove project repository. Please try again or contact administrator.')
- end
-
- 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
+ attempt_destroy_transaction(project, repo_path, wiki_path)
system_hook_service.execute_hooks_for(project, :destroy)
log_info("Project \"#{project.full_path}\" was removed")
true
+ rescue Projects::DestroyService::DestroyError => error
+ Rails.logger.error("Deletion failed on #{project.full_path} with the following message: #{error.message}")
+ false
end
private
@@ -71,6 +59,28 @@ module Projects
end
end
+ def attempt_destroy_transaction(project, repo_path, wiki_path)
+ Project.transaction do
+ unless remove_legacy_registry_tags
+ raise_error('Failed to remove some tags in project container registry. Please try again or contact administrator.')
+ end
+
+ unless remove_repository(repo_path)
+ raise_error('Failed to remove project repository. Please try again or contact administrator.')
+ end
+
+ 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
+ rescue Exception => error # rubocop:disable Lint/RescueException
+ project.update_attributes(delete_error: error.message, pending_delete: false)
+ raise
+ end
+
##
# This method makes sure that we correctly remove registry tags
# for legacy image repository (when repository path equals project path).
diff --git a/app/workers/project_destroy_worker.rb b/app/workers/project_destroy_worker.rb
index 209cf11e893..e695ec060f0 100644
--- a/app/workers/project_destroy_worker.rb
+++ b/app/workers/project_destroy_worker.rb
@@ -7,10 +7,7 @@ class ProjectDestroyWorker
user = User.find(user_id)
::Projects::DestroyService.new(project, user, params.symbolize_keys).execute
- rescue Exception => error # rubocop:disable Lint/RescueException
- project&.update_attributes(delete_error: error.message, pending_delete: false)
- Rails.logger.error("Deletion failed on #{project&.full_path} with the following message: #{error.message}")
-
- raise
+ rescue ActiveRecord::RecordNotFound => error
+ logger.error("Failed to delete project #{project.path_with_namespace} (#{project.id}): #{error.message}")
end
end