bridgev2/disappear: reduce disappear loop interval when there are lots of messages

This commit is contained in:
Tulir Asokan 2025-07-17 17:20:28 +03:00
commit 8efdbc029b

View file

@ -41,15 +41,22 @@ func (dl *DisappearLoop) Start() {
if err != nil {
log.Err(err).Msg("Failed to get upcoming disappearing messages")
} else if len(messages) > 0 {
if len(messages) > MessageLimit/2 && messages[len(messages)-1].DisappearAt.Before(time.Now()) {
lastDisappearTime := messages[len(messages)-1].DisappearAt
if len(messages) > MessageLimit/2 && lastDisappearTime.Before(time.Now()) {
// If there are many messages, and they're all due immediately,
// process them synchronously and then check again.
dl.sleepAndDisappear(ctx, messages...)
log.Debug().
Int("message_count", len(messages)).
Time("last_due", messages[len(messages)-1].DisappearAt).
Time("last_due", lastDisappearTime).
Msg("Checking for disappearing messages again immediately")
continue
} else if len(messages) >= MessageLimit && lastDisappearTime.Add(5*time.Second).Before(dl.NextCheck) {
log.Debug().
Int("message_count", len(messages)).
Time("last_due", lastDisappearTime).
Msg("Using lower disappearing message check interval as the limit was reached, but the last message isn't due yet")
dl.NextCheck = lastDisappearTime.Add(5 * time.Second)
}
go dl.sleepAndDisappear(ctx, messages...)
}