fix(orchestrator): acknowledge queued messages delivered to passthrough sessions (#3912)
Signed-off-by: Nicolas <nl@blackfuel.ai>
This commit is contained in:
@@ -1122,8 +1122,9 @@ func (s *Service) handleAgentReady(ctx context.Context, data watcher.AgentEventD
|
||||
releaseReservation()
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
// A delivered (or empty) reservation is acknowledged; a reservation
|
||||
// left in place is re-reserved and re-delivered at every turn end.
|
||||
if err := s.messageQueue.AcknowledgeQueuedForSession(
|
||||
context.WithoutCancel(ctx), identity, queuedMsg,
|
||||
); err != nil &&
|
||||
|
||||
@@ -126,6 +126,33 @@ func TestHandleAgentReady_PassthroughQueuedMessageSynchronousRunningEvent(t *tes
|
||||
require.Equal(t, models.TaskSessionStateRunning, updatedSession.State)
|
||||
}
|
||||
|
||||
func TestHandleAgentReady_PassthroughQueuedMessageDeliveredOnce(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
repo := setupTestRepo(t)
|
||||
seedSession(t, repo, "t1", "s1", "step1")
|
||||
|
||||
agentManager := &mockAgentManager{isPassthrough: true}
|
||||
svc := createTestServiceWithAgent(repo, newMockStepGetter(), newMockTaskRepo(), agentManager)
|
||||
svc.messageQueue.SetAutoMergeEnabled(false)
|
||||
|
||||
first, err := svc.messageQueue.QueueMessage(ctx, "s1", "t1", "peer report", "", "test", false, nil)
|
||||
require.NoError(t, err)
|
||||
second, err := svc.messageQueue.QueueMessage(ctx, "s1", "t1", "next report", "", "test", false, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
for range 3 {
|
||||
svc.handleAgentReady(ctx, watcher.AgentEventData{TaskID: "t1", SessionID: "s1"})
|
||||
}
|
||||
|
||||
require.Len(t, agentManager.passthroughStdinCalls, 2, "each queued message must be delivered exactly once")
|
||||
require.Equal(t, "peer report\r", agentManager.passthroughStdinCalls[0].Data)
|
||||
require.Equal(t, "next report\r", agentManager.passthroughStdinCalls[1].Data)
|
||||
for _, id := range []string{first.ID, second.ID} {
|
||||
_, err = svc.messageQueue.FindEntryByID(ctx, id)
|
||||
require.ErrorIs(t, err, messagequeue.ErrEntryNotFound)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleAgentReady_PassthroughQueuedMessagePublishesAfterWriteFailure(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
repo := setupTestRepo(t)
|
||||
|
||||
Reference in New Issue
Block a user