cancel review

This commit is contained in:
Ian Gulliver
2026-10-19 08:39:45 -07:00
parent 5e42346301
commit a725bc668b
2 changed files with 23 additions and 5 deletions
+22 -4
View File
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"log/slog"
"math"
"net/http"
"os"
"path/filepath"
@@ -92,6 +93,17 @@ func (m *Manager) afterSnapshot(snap *api.Snapshot) {
if task.Status != api.TaskStatusActive {
return
}
reviews, err := m.store.ListReviews(ctx, task.Id)
if err != nil {
slog.Error("list reviews to review", "task", task.Id, "err", err)
return
}
for _, r := range reviews {
if r.SnapshotN > snap.N {
slog.Info("review not started, a newer snapshot has one", "task", task.Id, "snapshot", snap.N, "newer", r.SnapshotN)
return
}
}
err = m.startReviewer(ctx, task, *snap)
if err != nil {
slog.Error("start review", "task", task.Id, "snapshot", snap.N, "err", err)
@@ -157,6 +169,7 @@ func (m *Manager) startReviewer(ctx context.Context, task api.Task, snap api.Sna
return err
}
slog.Info("review skipped, snapshot has no diff", "task", task.Id, "snapshot", snap.N)
m.failRunningReviews(ctx, task.Id, project, snap.N, fmt.Sprintf("superseded by snapshot %d", snap.N))
return nil
}
@@ -211,6 +224,7 @@ func (m *Manager) startReviewer(ctx context.Context, task api.Task, snap api.Sna
return err
}
slog.Info("review started", "review", reviewID, "task", task.Id, "snapshot", snap.N, "vendor", vendor, "model", model)
m.failRunningReviews(ctx, task.Id, project, snap.N, fmt.Sprintf("superseded by snapshot %d", snap.N))
return nil
}
@@ -496,17 +510,21 @@ func (m *Manager) failReview(ctx context.Context, reviewID, reason string) {
func (m *Manager) cancelReviews(ctx context.Context, task api.Task, project api.Project) {
m.reviewMu.Lock()
defer m.reviewMu.Unlock()
reviews, err := m.store.ListReviews(ctx, task.Id)
m.failRunningReviews(ctx, task.Id, project, math.MaxInt, "the task was closed")
}
func (m *Manager) failRunningReviews(ctx context.Context, taskID string, project api.Project, before int, reason string) {
reviews, err := m.store.ListReviews(ctx, taskID)
if err != nil {
slog.Error("list reviews to cancel", "task", task.Id, "err", err)
slog.Error("list reviews to cancel", "task", taskID, "err", err)
return
}
for _, r := range reviews {
if r.State != api.ReviewStateRunning {
if r.State != api.ReviewStateRunning || r.SnapshotN >= before {
continue
}
m.endReviewer(ctx, r.AgentSessionId, project, r.Id)
m.failReview(ctx, r.Id, "the task was closed")
m.failReview(ctx, r.Id, reason)
}
}