Move until_expired digests to separate zset#721
Merged
mhenrixon merged 2 commits intomhenrixon:mainfrom Jul 1, 2022
Merged
Conversation
Owner
|
This is a great suggestion, can't believe I didn't think about this before. Would love to see a green test suite here :) |
c34bf21 to
b490edd
Compare
b490edd to
58bcd05
Compare
Contributor
Author
|
Oh, I'm glad you like the idea! It's green now 🎉 🟢 Although I did add a few exceptions for reek/rubocop - hopefully these are OK |
Owner
|
I'll hold off on releasing this for a few days because I need to consider how this affects an upgrade. In your case (if you are still using I wonder what the damage would be for people upgrading and what version to create next. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This is another potential solution to #684 . Although for our specific use case, we've moved away from sidekiq unique jobs for high traffic until_expired jobs, this may still be helpful for other users.
This is quite a large change, I appreciate I may need to improve my Lua, or make different refactorings.
In simple terms, the idea is to treat
until_expireddigests separately to the others. For all other digests, cleanup looks like this:But for
until_expired, cleanup looks like this:For this reason, if you use a lot of
until_expiredjobs, the reaper can become very slow and expensive. My proposed solution here is:until_expireddigests with the others, put them in their own separate ZSET, where the value (score) is the expiry timeuntil_expiredZSET based on the score, skip the other (expensive) reaping checks.