FIX: delay the ‘send_advanced_tutorial_message’ job to prevent race conditions
When a user accepts an invite with an email address that matches a group which automatically awards its members Trust Level 2, a race condition might happen when the ‘send_advanced_tutorial_message’ job runs.
That job is enqueued inside the ‘user_promoted’ event which is triggered inside a transaction on the user record. If the job runs before the transaction is done, the user record is invisible and this generates an exception.
diff --git a/plugins/discourse-narrative-bot/plugin.rb b/plugins/discourse-narrative-bot/plugin.rb index 54e97a05e7..efa6ae8fea 100644 --- a/plugins/discourse-narrative-bot/plugin.rb +++ b/plugins/discourse-narrative-bot/plugin.rb @@ -257,7 +257,10 @@ after_initialize do args[:old_trust_level] == TrustLevel if SiteSetting.discourse_narrative_bot_enabled && promoted_from_tl1 - Jobs.enqueue(:send_advanced_tutorial_message, user_id: args[:user_id]) + # NOTE: since the `user_promoted` event is triggered from inside a transaction + # we have to delay the job otherwise it might run before the transaction + # is commited and the user will be invisible to the job + Jobs.enqueue_in(1.minute, :send_advanced_tutorial_message, user_id: args[:user_id]) end end end diff --git a/plugins/discourse-narrative-bot/public/public b/plugins/discourse-narrative-bot/public/public new file mode 120000 index 0000000000..65954e2f81 --- /dev/null +++ b/plugins/discourse-narrative-bot/public/public @@ -0,0 +1 @@ +/home/regis/Poetry/discourse/plugins/discourse-narrative-bot/public \ No newline at end of file
GitHub sha: 38074847