summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-04-24 10:19:18 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2017-04-24 10:19:18 +0000
commitc768026474b9dff9f6f988372e4eefb85b1d8be9 (patch)
treee198aa49ad17c23dfd2c31f58c819cfe86b143e1 /app
parente9f50438efe237e4ca38ba1ca0e5e82797bf4fb3 (diff)
parentcea8342b8d174834bccf71ad3433ea02e833419c (diff)
downloadgitlab-ce-c768026474b9dff9f6f988372e4eefb85b1d8be9.tar.gz
Merge branch '30306-transaction-while-moving-issues-to-ghost-user' into 'master'
Add a transaction around `move_issues_to_ghost_user` See merge request !10465
Diffstat (limited to 'app')
-rw-r--r--app/services/users/migrate_to_ghost_user_service.rb34
1 files changed, 23 insertions, 11 deletions
diff --git a/app/services/users/migrate_to_ghost_user_service.rb b/app/services/users/migrate_to_ghost_user_service.rb
index 1e1ed1791ec..4628c4c6f6e 100644
--- a/app/services/users/migrate_to_ghost_user_service.rb
+++ b/app/services/users/migrate_to_ghost_user_service.rb
@@ -15,27 +15,39 @@ module Users
end
def execute
- # Block the user before moving records to prevent a data race.
- # For example, if the user creates an issue after `migrate_issues`
- # runs and before the user is destroyed, the destroy will fail with
- # an exception.
- user.block
+ transition = user.block_transition
user.transaction do
+ # Block the user before moving records to prevent a data race.
+ # For example, if the user creates an issue after `migrate_issues`
+ # runs and before the user is destroyed, the destroy will fail with
+ # an exception.
+ user.block
+
+ # Reverse the user block if record migration fails
+ if !migrate_records && transition
+ transition.rollback
+ user.save!
+ end
+ end
+
+ user.reload
+ end
+
+ private
+
+ def migrate_records
+ user.transaction(requires_new: true) do
@ghost_user = User.ghost
migrate_issues
migrate_merge_requests
migrate_notes
migrate_abuse_reports
- migrate_award_emoji
+ migrate_award_emojis
end
-
- user.reload
end
- private
-
def migrate_issues
user.issues.update_all(author_id: ghost_user.id)
end
@@ -52,7 +64,7 @@ module Users
user.reported_abuse_reports.update_all(reporter_id: ghost_user.id)
end
- def migrate_award_emoji
+ def migrate_award_emojis
user.award_emoji.update_all(user_id: ghost_user.id)
end
end