Fix the throttle oversupply counting #124
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.
The previous implementation had false positives for oversupply when the
limit was increased at runtime due to the channel not being drained than
the for loop could put 2N tokens in N pigeonholes.
The new implementation uses a timeout for each episode of the throttle
that will terminate the for loop early if the tokens can't all be sent
down the channel. I considered using the next tick of the main ticker as
the timeout, but this would have caused the next episode of the throttle
to be skipped without more complexity being added.