Deletion state doesn't get rolled back when update service fails
Identified in https://gitlab.com/gitlab-com/request-for-help/-/work_items/4044+
Whenever we schedule a project for deletion and the ::Projects::UpdateService returns an error. It doesn't rollback the project's state causing succeeding requests to raise transition errors.
Steps to replicate
- Apply the following patch
Index: app/services/projects/update_service.rb
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/services/projects/update_service.rb b/app/services/projects/update_service.rb
--- a/app/services/projects/update_service.rb (revision 97e55fb014f7cabd926a3eec80be6cff1ce5ae7b)
+++ b/app/services/projects/update_service.rb (date 1768469120710)
@@ -10,6 +10,8 @@
ApiError = Class.new(StandardError)
def execute
+ raise ValidationError, 'Oh no, something went wrong.'
+
build_topics
ensure_ci_cd_settings
remove_unallowed_params
- Delete a project twice.
Implementation Guide
- Raise an exception when the update service fails to trigger the transaction rollback in
Projects::MarkForDeletionService#execute_deletion
Edited by Shane Maglangit