Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WHO Polling Fixes/Improvements #699

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft

WHO Polling Fixes/Improvements #699

wants to merge 2 commits into from

Conversation

andymandias
Copy link
Collaborator

This contains a number of changes to WHO polling, primarily to address the behavior reported in #584. Includes:

  • Use WHO polling queue to perform WHO polls in serial, rather than in parallel. Greatly reduces the effective rate of WHO polling for users in more than a few channels (the default rate has been increased a bit as a result, but should still be slower than before for most users). And, ensures that the maximum WHO polling rate can be more-straightforwardly controlled by the user configuring who_poll_interval and who_retry_interval.
  • Switches the WHO show/hide logic to hide all WHO replies unless a user initiated WHO request was sent. Previously WHO replies would be shown unless a WHO poll was sent. Ensures WHO replies sent by other clients are not shown, even if they are not routed to the requesting client (e.g. when using ZNC with multiple clients & without route_replies enabled).
  • Fixes a bug where WHO polls that were sent before CAP negotiation completed could be parsed incorrectly (effectively throwing away the result of the first WHO poll request).

In testing this allows server WHO rate-limit to be better respected, but I do see some rate-limit notifications due to the initial WHO polling initiated by channel JOINs on Libera. I expected those WHO polls to be valid since Solanum appears to give a "WHO credit" for each JOIN, so that remains to be sorted out.

…ing in parallel.

Flip `WHO` history logic to only show when a user request is active (instead of only hide when a WHO poll is active) to prevent showing RPL_WHOREPLY/RPL_WHOSPCRPL messages from WHO polls sent by other clients.
Additional interval before retrying a WHO request sent due to JOIN (to give additional time for servers to respond to concurrent WHO requests sent due to simultaneous JOINs).
Use distinct tokens for each format of WHO polling to ensure replies are parsed correctly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant