Slightly rework causal_diff_queue insertion logic #99
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.
Overview
@ChrisPenner and I accidentally discovered today that the real culprit behind an
INSERT ON CONFLICT DO NOTHING
intocausal_diff_queue
blocking is not due to a row lock taken bySELECT FOR UPDATE
, but rather the eagerDELETE
of the selected row.So, we decided to simply move the
DELETE
call to after a worker has finished computing a namespace diff, significantly reducing the time window during which a concurrentINSERT
might block.This also lets us implement the "on get contribution diff, if missing, insert into work queue" which is convenient to have for a number of minor reasons, including that we can wipe precomputed diffs out of
namespace_diffs
whenever we need to, since we are no longer relying on creating or updating a contribution being the only actions that trigger a diff computation.