Clean expired IDs before marked-entry trimming

This commit is contained in:
vekovius 2026-08-05 16:21:40 -05:00
parent b896dd3f61
commit fb5b134936
2 changed files with 19 additions and 1 deletions

View File

@ -57,8 +57,10 @@ final class MessageDeduplicator {
lock.lock()
defer { lock.unlock() }
let now = Date()
cleanupOldEntries(before: now.addingTimeInterval(-maxAge))
if lookup[id] == nil {
let now = Date()
entries.append(Entry(id: id, timestamp: now))
lookup[id] = now
trimIfNeeded()

View File

@ -25,4 +25,20 @@ struct MessageDeduplicatorTests {
#expect(deduplicator.contains("d"))
#expect(deduplicator.contains("e"))
}
@Test func markProcessed_cleansExpiredEntriesBeforeCountTrim() async {
let deduplicator = MessageDeduplicator(maxAge: 0.1, maxCount: 4)
deduplicator.markProcessed("expired")
try? await Task.sleep(nanoseconds: 200_000_000)
for id in ["b", "c", "d", "e"] {
deduplicator.markProcessed(id)
}
#expect(deduplicator.contains("b"))
#expect(deduplicator.contains("c"))
#expect(deduplicator.contains("d"))
#expect(deduplicator.contains("e"))
}
}