Update tombstone API to minimize DB ops #429
Merged
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.
Current
Our current tombstoning API
tombstone_value_statesaccepts a list ofValueStatekeys that tombstoning should be performed for. This means that the client flow will, more often than not, involve:ValueStateobjects for a given user in DBInternally, the tombstone API then does another lookup of
ValueStateobjects with the keys passed, modifies the objects to "tombstone" them, then another write to commit the now-tombstoned objects.Proposed
We can cut out the DB lookup pre-API call by having the API take in an epoch and a username, then tombstoning all
ValueStateobjects for the user with an epoch less than or equal to the passed epoch. Clients will not need any knowledge of whatValueStateobjects a user has, and just need to inform the API which epoch to stop tombstoning at.In addition, before we write the tombstoned records, we should filter out any objects that are already tombstoned, to avoid unnecessary writes.