Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
Some issues were recently reported with subscription upgrade with subscriptions attached to a plan payed in advance,
After investigation it appears that the issue is related to some jobs enqueued during the database transaction dealing with the upgrade process. As the jobs might be performed by sidekiq before the commit of the transaction, the result is unpredictable (subscription status in particular might not be the expected one) and the issue hard to reproduce.
Description
The fix is to add all jobs in a queue and perform them only when the DB transaction lock is released.
For that purpose a new reusable utility concern was created named
Utils::TransactionalJobs
. It exposes two methods:perform_later
to push the job into a queue andperform_pending_jobs
to run all jobs when the transaction is released.