Skip to content

feat: add logging to streams #6924

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

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

feat: add logging to streams #6924

wants to merge 10 commits into from

Conversation

link2xt
Copy link
Collaborator

@link2xt link2xt commented Jun 18, 2025

LoggingStream is a wrapper for IMAP/SMTP/HTTP session streams. Originally I started building it with the idea to debug #6477 and similar issues where IMAP loop gets stuck with the hope that right before the loop gets stuck or even continuously there are socket errors like a read timeout that are not treated correctly.

Now I also think about expanding it for measuring network performance, e.g. throughput and latency.

We can estimate latency by measuring the time between the last full write() and the first successful read(). This should measure e.g. the time between writing "A0001 IDLE" and receiving "+", but not the time when we are in a long read() actually idling. This latency might however actually be low on throttled connections and not reflect that message downloading is slow. If throttling works as a rate limiter and not some hack like random packet dropping, then latency will not increase.

For throughput it's possible to measure something by averaging over the intervals from first read after full write until the end of last read followed by a write. We don't run multiple IMAP commands in parallel, so this should be a good estimation.

When connecting to servers we currently sort IPs as at most two IPs returned from DNS followed by DNS cache, followed by the rest of DNS results. If we have throughput estimations, we may sort by the expected (sampled from empirical distribution) throughput and avoid connecting to IP addresses that are known to be slow or timeout frequently due to congestion or bad routing over low-rate or high packet loss connections.

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