fix: disable agent dry-run without executor
This commit is contained in:
@@ -15,6 +15,14 @@ type WorkerCycleResult struct {
|
||||
Idle bool
|
||||
}
|
||||
|
||||
// RecoverOnlyWorkerCycle keeps durable recovery alive while the real executor
|
||||
// capability is absent. It intentionally does not claim a dispatch: a missing
|
||||
// executor must never be represented as successful work.
|
||||
func RecoverOnlyWorkerCycle(ctx context.Context, store ports.WorkerStore, now time.Time, staleAfter time.Duration) (WorkerCycleResult, error) {
|
||||
recovered, err := store.RecoverStaleClaims(ctx, now.UnixMilli(), staleAfter.Milliseconds())
|
||||
return WorkerCycleResult{RecoveredClaims: recovered, Idle: err == nil}, err
|
||||
}
|
||||
|
||||
func ExecuteWorkerCycle(ctx context.Context, store ports.WorkerStore, workerID string, token work.AgentFencingToken, now time.Time, staleAfter, leaseTTL time.Duration) (WorkerCycleResult, error) {
|
||||
recovered, err := store.RecoverStaleClaims(ctx, now.UnixMilli(), staleAfter.Milliseconds())
|
||||
if err != nil {
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package application
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.cin.su/m/Assistant/contracts/work"
|
||||
)
|
||||
|
||||
type recoveryOnlyStore struct {
|
||||
recovered int64
|
||||
claimed bool
|
||||
}
|
||||
|
||||
func (s *recoveryOnlyStore) RecoverStaleClaims(context.Context, int64, int64) (int64, error) {
|
||||
return s.recovered, nil
|
||||
}
|
||||
func (s *recoveryOnlyStore) ClaimNextDispatch(context.Context, string, int64) (work.AgentDispatchQueueItem, error) {
|
||||
s.claimed = true
|
||||
return work.AgentDispatchQueueItem{}, nil
|
||||
}
|
||||
func (s *recoveryOnlyStore) LoadDispatchIntent(context.Context, string) (work.AgentDispatchIntent, error) {
|
||||
return work.AgentDispatchIntent{}, nil
|
||||
}
|
||||
func (s *recoveryOnlyStore) CompleteDispatch(context.Context, string, string, work.AgentDispatchQueueState, int64) error {
|
||||
return nil
|
||||
}
|
||||
func (s *recoveryOnlyStore) SaveDispatchIntent(context.Context, work.AgentDispatchIntent) error {
|
||||
return nil
|
||||
}
|
||||
func (s *recoveryOnlyStore) SaveAgentLease(context.Context, work.AgentLease) error { return nil }
|
||||
func (s *recoveryOnlyStore) AcceptAgentCallback(context.Context, work.AgentCallback) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestRecoverOnlyWorkerCycleNeverClaimsDispatch(t *testing.T) {
|
||||
store := &recoveryOnlyStore{recovered: 2}
|
||||
result, err := RecoverOnlyWorkerCycle(context.Background(), store, time.UnixMilli(1_700_000_000_000), time.Minute)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if result.RecoveredClaims != 2 || !result.Idle || store.claimed {
|
||||
t.Fatalf("unexpected recovery-only result: %+v claimed=%t", result, store.claimed)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user