From 697c41a3f6d67671942ef941273095b02043dfc7 Mon Sep 17 00:00:00 2001 From: Elysia <1628615876@qq.com> Date: Thu, 16 Apr 2026 20:41:40 +0800 Subject: [PATCH] fix: create fresh context per watermark write retry attempt Each retry in the SetOutboxWatermark loop now gets its own 5s context. Previously a shared context could already be expired when the second or third attempt ran, making the retries pointless. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- backend/internal/service/scheduler_snapshot_service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/internal/service/scheduler_snapshot_service.go b/backend/internal/service/scheduler_snapshot_service.go index 5ead45bc..62b6993d 100644 --- a/backend/internal/service/scheduler_snapshot_service.go +++ b/backend/internal/service/scheduler_snapshot_service.go @@ -264,11 +264,11 @@ func (s *SchedulerSnapshotService) pollOutbox() { } lastID := events[len(events)-1].ID - wmCtx, wmCancel := context.WithTimeout(context.Background(), 5*time.Second) - defer wmCancel() var wmErr error for i := range 3 { + wmCtx, wmCancel := context.WithTimeout(context.Background(), 5*time.Second) wmErr = s.cache.SetOutboxWatermark(wmCtx, lastID) + wmCancel() if wmErr == nil { break }