diff options
author | Tiago Botelho <tiagonbotelho@hotmail.com> | 2017-07-06 14:43:07 +0100 |
---|---|---|
committer | Tiago Botelho <tiagonbotelho@hotmail.com> | 2017-07-20 09:59:56 +0100 |
commit | 0aa8249e484ca97cfc28c7301d69077919032c08 (patch) | |
tree | 347640b916c5064d014bb34fe54dafa1230191ca | |
parent | 3491b19a4e67a9f439c12afac45ef38f3fce0ef5 (diff) | |
download | gitlab-ce-0aa8249e484ca97cfc28c7301d69077919032c08.tar.gz |
Refactors Project Destroy service and worker code
-rw-r--r-- | app/services/projects/destroy_service.rb | 42 | ||||
-rw-r--r-- | app/workers/project_destroy_worker.rb | 7 |
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 |