Stream token optimization for media object IIIF manifest endpoint #5478
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.
Resolves #5476
There are two StreamToken methods at the heart of this PR:
In
purge_expired!
the first loop is avoided by usingdelete_all
. The second loop is avoided by inverting the logic: finding the existing tokens in the DB instead of removing ones that no longer exist.get_stream_tokens_for
is a new batch alternative tofind_or_create_session_token
. This new method usesupsert_all
to update existing records and create ones that do not exist yet. It takes a little bit of special handling to create the array of attribute hashes that upsert requires. Ids need to be added to that hash in order for upsert to find existing records without a unique index in the DB.The rest of the PR is refactoring to utilize
get_stream_tokens_for
.Future Work: