Don't force sliding window entries to be monotonic #246
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.
The code in #227 is not passing tests, because it forces an invariant on the
SlidingWindow
that entries be monotonic. This doesn't work, unfortunately, with host-based circuits, since individual processes perform a two-step operation of:These operations, performed without a lock, can be interleaved and violates the invariant.
I tried to make that operation atomic, but it breaks with tests that want to use
Timecop.travel
to modify the system time. Therefore, the only option I had was to relax the invariant.This does change the runtime of the
reject!
function to Ω(n) from O(n). Given that n tends to be less than 100, even in host-based circuits with a largescale_factor
, this shouldn't be a big deal.cc: @Shopify/servcomm