fix(events): refuse a retention below one day

A retention of zero or less moved the delete cutoff to now or later. The cleaner then deleted all event history. The cleaner now refuses to start and returns an error.
This commit is contained in:
2026-11-03 00:31:53 +00:00
parent 3e187790f2
commit 6e7e2ecfae
2 changed files with 33 additions and 0 deletions
+7
View File
@@ -12,6 +12,9 @@ import (
const (
initialDelay = 60 * time.Second
cleanupInterval = 1 * time.Hour
// minRetentionDays guards against a cutoff at or after NOW(), which would delete all event history.
minRetentionDays = 1
)
// Use parameterized queries to prevent SQL injection
@@ -46,6 +49,10 @@ func enableHasuraEventCleaner(ctx context.Context) error {
logger := cfg.Logger
cfgMutex.RUnlock()
if clearOlderThan < minRetentionDays {
return fmt.Errorf("HASURA_EVENT_CLEANER_OLDER_THAN must be at least %d day, got %d: event cleaner not started", minRetentionDays, clearOlderThan)
}
logger.Info(&libpack_logger.LogMessage{
Message: "Event cleaner enabled",
Pairs: map[string]any{"interval_in_days": clearOlderThan},
+26
View File
@@ -0,0 +1,26 @@
package main
import (
"context"
"testing"
libpack_logger "github.com/lukaszraczylo/graphql-monitoring-proxy/logging"
"github.com/stretchr/testify/assert"
)
// Pins theorems/Theorems/EventCleaner.lean: a retention below one day would delete all event history.
func TestEnableHasuraEventCleaner_RejectsNonPositiveRetention(t *testing.T) {
for _, days := range []int{0, -1, -30} {
cfgMutex.Lock()
cfg = &config{Logger: libpack_logger.New()}
cfg.HasuraEventCleaner.Enable = true
cfg.HasuraEventCleaner.EventMetadataDb = "postgres://fake:[email protected]:1/fake"
cfg.HasuraEventCleaner.ClearOlderThan = days
cfgMutex.Unlock()
ctx, cancel := context.WithCancel(context.Background())
err := enableHasuraEventCleaner(ctx)
cancel()
assert.Error(t, err, "days=%d", days)
}
}