Skip to content

fix: replace unbounded seenIds Set with bounded LRU set in email listener#222

Draft
bukinoshita wants to merge 1 commit intomainfrom
fix/bounded-seen-ids-66e8
Draft

fix: replace unbounded seenIds Set with bounded LRU set in email listener#222
bukinoshita wants to merge 1 commit intomainfrom
fix/bounded-seen-ids-66e8

Conversation

@bukinoshita
Copy link
Copy Markdown
Member

@bukinoshita bukinoshita commented Apr 9, 2026

Summary by cubic

Replace the unbounded seenIds Set in the inbound email listener with a bounded LRU set to stop linear memory growth and OOMs on busy inboxes. Caps dedup memory to 10,000 IDs while keeping recent-email dedup; resolves BU-643.

  • Bug Fixes
    • Implemented a Map-based createBoundedSet with O(1) eviction and used it in the email receive listener.
    • Added tests for membership, eviction on overflow, LRU refresh on re-add, capacity limits, duplicates, and default size.

Written for commit 10aad89. Summary will update on new commits.

…ener

The inbound email listener (emails receiving listen) stored every observed
message ID in an in-memory Set for the entire lifetime of the process.
On busy inboxes, this causes linear memory growth and eventual OOM.

Replace the unbounded Set with a bounded LRU-style set (createBoundedSet)
that evicts the oldest entries when capacity is exceeded (default 10,000).
This caps memory usage while preserving deduplication for recent emails.

Resolves BU-643

Co-authored-by: Bu Kinoshita <bukinoshita@users.noreply.github.com>
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.

2 participants