From 765115ee76c567ca7fce14604991145db325e1f9 Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Mon, 15 Jun 2026 19:41:39 +0200 Subject: [PATCH] fix(server): snapshot queue completion results Signed-off-by: Minh Vu --- pkg/server/trailing_delay_queue.go | 3 +- pkg/server/trailing_delay_queue_test.go | 39 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/pkg/server/trailing_delay_queue.go b/pkg/server/trailing_delay_queue.go index f8f7437..11fea2f 100644 --- a/pkg/server/trailing_delay_queue.go +++ b/pkg/server/trailing_delay_queue.go @@ -122,7 +122,8 @@ func (q *TrailingDelayQueue) Get(hash string) *Completion { defer q.mutex.Unlock() if res, ok := q.store.Get(hash); ok { - return res.(*Completion) + completion := *(res.(*Completion)) + return &completion } return &Completion{ diff --git a/pkg/server/trailing_delay_queue_test.go b/pkg/server/trailing_delay_queue_test.go index 9d72248..7c9fed5 100644 --- a/pkg/server/trailing_delay_queue_test.go +++ b/pkg/server/trailing_delay_queue_test.go @@ -166,3 +166,42 @@ func TestSubmitRunningCallbackDoesNotDeleteReplacementTimer(t *testing.T) { defer queue.mutex.Unlock() require.Same(t, replacement, queue.timers[hash]) } + +func TestGetReturnsCompletionSnapshot(t *testing.T) { + const hash = "same-request" + + started := make(chan struct{}) + unblock := make(chan struct{}) + + queue := NewTrailingDelayQueue(func(item any) (any, *httperr.Error) { + close(started) + <-unblock + return item, nil + }, 10*time.Millisecond) + defer queue.Shutdown() + + uid, err := queue.Submit(trailingDelayQueueTestItem{hash: hash}) + require.NoError(t, err) + require.Equal(t, hash, uid) + + require.Eventually(t, func() bool { + select { + case <-started: + return true + default: + return false + } + }, time.Second, 10*time.Millisecond) + + pending := queue.Get(uid) + require.Equal(t, http.StatusAccepted, pending.Status) + require.Nil(t, pending.Ret) + + close(unblock) + require.Eventually(t, func() bool { + return queue.Get(uid).Status == http.StatusOK + }, time.Second, 10*time.Millisecond) + + require.Equal(t, http.StatusAccepted, pending.Status) + require.Nil(t, pending.Ret) +}