perf(gmail): respect Gmail IMAP connection & bandwidth limits in sync/backfill #361

Closed
opened 2026-07-05 22:24:09 +00:00 by JMR-dev · 0 comments
JMR-dev commented 2026-07-05 22:24:09 +00:00 (Migrated from github.com)

Context

LibreMail is an offline-first Android email client. IMAP is currently connect-per-operation (connection reuse, issue #125, is OFF by default); full-history backfill (issue #12) prefetches message bodies + attachments on unmetered networks (default FetchPolicy.WIFI_ONLY). A perf drilldown found this opens roughly 1 + K + attachments separate authenticated connections per backfill page, saturating a provider's connection/bandwidth budget and starving interactive message-opens. These tickets track making LibreMail's connection/request patterns and data usage respect each major provider's documented limits and degrade gracefully under throttling. (Outlook/Hotmail uses the Microsoft Graph REST API; Gmail, Yahoo/AOL, and iCloud use IMAP/SMTP.)

Documented limits

  • 15 max simultaneous IMAP connections.
  • 2,500 MB/day download.
  • 500 MB/day upload.
  • 10,000 messages per label.
  • 10,000 labels.

Optimization levers

  • Cap the per-account connection pool with headroom below 15 (reserve at least 1 for interactive opens).
  • Land connection reuse (#125/#357) so backfill/prefetch stop opening 1+K+attachments sockets.
  • Track cumulative daily download bytes and throttle/defer prefetch as the 2,500 MB budget is approached.
  • Use the 10k-per-label figure as the backfill denominator.

Depends on

Depends on / see the throttling-backoff umbrella issue #360.

## Context LibreMail is an offline-first Android email client. IMAP is currently connect-per-operation (connection reuse, issue #125, is OFF by default); full-history backfill (issue #12) prefetches message bodies + attachments on unmetered networks (default `FetchPolicy.WIFI_ONLY`). A perf drilldown found this opens roughly `1 + K + attachments` separate authenticated connections per backfill page, saturating a provider's connection/bandwidth budget and starving interactive message-opens. These tickets track making LibreMail's connection/request patterns and data usage respect each major provider's documented limits and degrade gracefully under throttling. (Outlook/Hotmail uses the Microsoft Graph REST API; Gmail, Yahoo/AOL, and iCloud use IMAP/SMTP.) ## Documented limits - 15 max simultaneous IMAP connections. - 2,500 MB/day download. - 500 MB/day upload. - 10,000 messages per label. - 10,000 labels. ## Optimization levers - Cap the per-account connection pool with headroom below 15 (reserve at least 1 for interactive opens). - Land connection reuse (#125/#357) so backfill/prefetch stop opening `1+K+attachments` sockets. - Track cumulative daily download bytes and throttle/defer prefetch as the 2,500 MB budget is approached. - Use the 10k-per-label figure as the backfill denominator. ## Depends on Depends on / see the throttling-backoff umbrella issue #360.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JMR-dev/LibreMail#361