Rewrite the quit debouncer to drop quits early #1091
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.
For the uninitiated: Debouncing quits is something we do when a IRC server netsplits, to avoid the matrix server being flooded with /leave requests and/or killing the bridge.
Currently the quit debouncer code operates at the IrcHandler level, which means it's already gone through some hot paths of the code such as identifying which rooms to talk into. Furthermore, the debouncer operates by storing a deferred promise to work on later when bridging delayed QUITs.
In the field, we've noticed that the bridge will crash and burn long before it gets to this queue, so this code attempts to drop QUITs very early on, and store the work in a simple data structure to try and limit the amount of work involved when debouncing.
Please review this PR with a mindset of trying to achieve the above with the smallest per-request footprint on CPU/memory.