Run the merge queue on a state-driven coordinator
This commit is contained in:
+22
-18
@@ -69,9 +69,13 @@ func isContinuation(actor, text string) bool {
|
||||
func (m *Manager) continueFromHandoff(sessionID, handoff string) {
|
||||
ctx := context.Background()
|
||||
err := m.handoff(ctx, sessionID, handoff)
|
||||
if err != nil {
|
||||
slog.Error("continue from handoff", "session", sessionID, "err", err)
|
||||
m.advanceSessionMergeClaim(ctx, sessionID)
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
slog.Error("continue from handoff", "session", sessionID, "err", err)
|
||||
err = m.store.TransitionSession(ctx, sessionID, api.AgentSessionStateRunning, api.AgentSessionStateIdle, "byre")
|
||||
if err != nil && !errors.Is(err, store.ErrStateChanged) {
|
||||
slog.Error("end failed handoff", "session", sessionID, "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,28 +99,28 @@ func (m *Manager) handoff(ctx context.Context, sessionID, handoff string) error
|
||||
return err
|
||||
}
|
||||
|
||||
discard, err := m.store.GetDiscard(ctx, sess.TaskId)
|
||||
if err != nil {
|
||||
return err
|
||||
if creator.GitName == "" || creator.GitEmail == "" {
|
||||
return ErrNoGitIdentity
|
||||
}
|
||||
if discard.State != store.DiscardNone {
|
||||
m.startDiscard(sess.TaskId)
|
||||
return nil
|
||||
}
|
||||
err = transition(ctx, m.store, sess.Id, api.AgentSessionStateIdle, api.AgentSessionStateCompleted, "byre")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.stopLive(sess.Id)
|
||||
|
||||
task, err := m.store.GetTask(ctx, sess.TaskId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = m.create(ctx, task, creator, sess.Member, handoffPreamble+handoff, model, "byre", "", "", nil)
|
||||
if errors.Is(err, ErrConflict) {
|
||||
next := sessionFor(task, creator, sess.Member, model)
|
||||
next.State = api.AgentSessionStateRunning
|
||||
err = m.store.ReplaceSession(ctx, sess.Id, next, task.ProjectId, "byre")
|
||||
if errors.Is(err, store.ErrStateChanged) {
|
||||
err = transition(ctx, m.store, sess.Id, api.AgentSessionStateRunning, api.AgentSessionStateIdle, "byre")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.startDiscard(task.Id)
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.stopLive(sess.Id)
|
||||
_, err = m.launch(ctx, next, task, "byre", handoffPreamble+handoff, "", "", nil)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user