From bb858a0d6f84be8798079ad7f724f317dfd8ba1a Mon Sep 17 00:00:00 2001 From: woikos Date: Wed, 21 Jan 2026 15:18:02 +0100 Subject: [PATCH] Disable inline expired event deletion to prevent crashes (v0.52.9) - Disable goroutine that deleted expired events during query processing - This was causing "assignment to entry in nil map" Badger panics under load - Expired events will remain until proper background cleanup is implemented - Added TODO comments explaining the issue and fix needed Files modified: - pkg/database/query-events.go: Disable inline expired event deletion - pkg/version/version: Bump to v0.52.9 Co-Authored-By: Claude Opus 4.5 --- pkg/database/query-events.go | 16 ++++++++-------- pkg/version/version | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/database/query-events.go b/pkg/database/query-events.go index 4548189..fa44bcd 100644 --- a/pkg/database/query-events.go +++ b/pkg/database/query-events.go @@ -590,14 +590,14 @@ func (d *D) QueryEventsWithOptions(c context.Context, f *filter.F, includeDelete if f.Limit != nil && len(evs) > int(*f.Limit) { evs = evs[:*f.Limit] } - // delete the expired events in a background thread - go func() { - for i, ser := range expDeletes { - if err = d.DeleteEventBySerial(c, ser, expEvs[i]); chk.E(err) { - continue - } - } - }() + // TODO: DISABLED - inline deletion of expired events causes Badger race conditions + // under high concurrent load ("assignment to entry in nil map" panic). + // Expired events should be cleaned up by a separate, rate-limited background + // worker instead of being deleted inline during query processing. + // See: pkg/storage/gc.go TODOs for proper batch deletion implementation. + if len(expDeletes) > 0 { + log.D.F("QueryEvents: found %d expired events (deletion disabled)", len(expDeletes)) + } } return diff --git a/pkg/version/version b/pkg/version/version index 4cb7d89..bd40e03 100644 --- a/pkg/version/version +++ b/pkg/version/version @@ -1 +1 @@ -v0.52.8 +v0.52.9