From df7edaef0cba7e7b05c5b9a46541a1391932182e Mon Sep 17 00:00:00 2001 From: Pavel Shutsin Date: Mon, 4 Mar 2019 22:03:00 +0300 Subject: Fix Members::BaseService to work properly with transactions We shouldn't schedule Sidekiq jobs directly during service execution. Instead we should postpone it to after_commit block where possible. --- app/services/members/base_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/members/base_service.rb b/app/services/members/base_service.rb index e78affff797..5d69418fb7d 100644 --- a/app/services/members/base_service.rb +++ b/app/services/members/base_service.rb @@ -51,7 +51,9 @@ module Members def enqueue_delete_todos(member) type = member.is_a?(GroupMember) ? 'Group' : 'Project' # don't enqueue immediately to prevent todos removal in case of a mistake - TodosDestroyer::EntityLeaveWorker.perform_in(Todo::WAIT_FOR_DELETE, member.user_id, member.source_id, type) + member.run_after_commit_or_now do + TodosDestroyer::EntityLeaveWorker.perform_in(Todo::WAIT_FOR_DELETE, member.user_id, member.source_id, type) + end end end end -- cgit v1.2.1