Fix thumbnail writing for multi-concurrent and multi-db setups #2433
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.
What is this pull request for?
Fix race condition in PictureThumb::Create
In a multi concurrent application server (like Puma) it happens that
a thumb might already exist for a given signature during the very
short timeframe of finding it vs creating it.
Using ARs create_or_find_by! do avoid
ActiveRecord::RecordNotUnique
errors. ActiveStorage does theexact same thing to avoid concurrency issues.
Closes #2429
Connect to writing database during thumbnail generation
In a multi db setup where you have a reading and a writing database
we need to make sure that we are using the writing database.
This is necessary, because we are writing (caching) picture
thumbnails in a GET request. Usually Rails would handle this for us
on POST, PATCH/PUT and DELETE requests.
ActiveStorage does the same thing to support multi database
setups.
Closes #2428
Checklist