Advance workflow stages from the state-driven coordinator

This commit is contained in:
Ian Gulliver
2026-10-21 13:11:03 -07:00
parent c77a5ba02b
commit be777e469c
6 changed files with 49 additions and 40 deletions
+15 -25
View File
@@ -362,34 +362,24 @@ func (m *Manager) recordStage(ctx context.Context, l *live) error {
return m.store.RecordStage(ctx, l.taskID, output, head)
}
func (m *Manager) advanceStage(l *live) {
func (m *Manager) advanceStage(sessionID string) {
ctx := context.Background()
_, err := m.nextStage(ctx, l.id)
if err != nil {
slog.Error("advance workflow stage", "session", l.id, "err", err)
m.recordError(l, fmt.Sprintf("The workflow didn't move on from this stage: %v. byre tries again when it next starts.", err))
}
m.afterTurn(ctx, l)
}
func (m *Manager) recoverStages(ctx context.Context) (map[string]bool, error) {
ids, err := m.store.FinishedStages(ctx)
if err != nil {
return nil, err
}
started := map[string]bool{}
for _, id := range ids {
next, err := m.nextStage(ctx, id)
if err != nil {
slog.Error("advance workflow stage", "session", id, "err", err)
continue
next, err := m.nextStage(ctx, sessionID)
if err == nil {
slog.Info("advanced workflow stage", "session", sessionID, "next", next)
} else {
slog.Error("advance workflow stage", "session", sessionID, "err", err)
sess, serr := m.store.GetSession(ctx, sessionID)
if serr == nil {
m.fileError(ctx, sess.TaskId, fmt.Sprintf("The workflow didn't move on from this stage: %v. byre tries again when it next starts.", err))
}
for _, n := range next {
started[n] = true
}
slog.Info("advanced workflow stage", "session", id, "next", next)
}
return started, nil
m.mu.Lock()
l := m.live[sessionID]
m.mu.Unlock()
if l != nil {
m.afterTurn(ctx, l)
}
}
func (m *Manager) nextStage(ctx context.Context, sessionID string) ([]string, error) {