diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-04-24 13:19:18 +0300 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-04-24 13:19:18 +0300 |
commit | c768026474b9dff9f6f988372e4eefb85b1d8be9 (patch) | |
tree | e198aa49ad17c23dfd2c31f58c819cfe86b143e1 /app | |
parent | e9f50438efe237e4ca38ba1ca0e5e82797bf4fb3 (diff) | |
parent | cea8342b8d174834bccf71ad3433ea02e833419c (diff) |
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.rb | 34 |
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 |