MCPcopy Create free account
hub / github.com/compozy/agh / RecoverTaskRun

Method RecoverTaskRun

internal/task/manager_test.go:1507–1560  ·  view source on GitHub ↗
(
	_ context.Context,
	mutation RecoverRunMutation,
)

Source from the content-addressed store, hash-verified

1505}
1506
1507func (s *inMemoryManagerStore) RecoverTaskRun(
1508 _ context.Context,
1509 mutation RecoverRunMutation,
1510) (RetryRunResult, error) {
1511 source, ok := s.runs[strings.TrimSpace(mutation.SourceRunID)]
1512 if !ok {
1513 return RetryRunResult{}, ErrTaskRunNotFound
1514 }
1515 if source.Status.Normalize() != TaskRunStatusNeedsAttention {
1516 return RetryRunResult{}, ErrInvalidStatusTransition
1517 }
1518 for _, run := range s.runs {
1519 if strings.TrimSpace(run.PreviousRunID) == source.ID {
1520 return RetryRunResult{}, ErrInvalidStatusTransition
1521 }
1522 }
1523 taskRecord, ok := s.tasks[source.TaskID]
1524 if !ok {
1525 return RetryRunResult{}, ErrTaskNotFound
1526 }
1527 attempt := 1
1528 for _, run := range s.runs {
1529 if run.TaskID == source.TaskID && run.Attempt >= attempt {
1530 attempt = run.Attempt + 1
1531 }
1532 }
1533 if attempt > taskRecord.MaxAttempts {
1534 return RetryRunResult{}, ErrInvalidStatusTransition
1535 }
1536 queuedAt := mutation.QueuedAt.UTC()
1537 if queuedAt.IsZero() {
1538 queuedAt = time.Now().UTC()
1539 }
1540 failed := source
1541 failed.Status = TaskRunStatusFailed
1542 failed.FailureKind = FailureKindOperatorForced
1543 failed.Error = strings.TrimSpace(mutation.Reason)
1544 failed.EndedAt = queuedAt
1545 s.runs[failed.ID] = cloneTaskRun(failed)
1546 run := Run{
1547 ID: strings.TrimSpace(mutation.NewRunID),
1548 TaskID: source.TaskID,
1549 Status: TaskRunStatusQueued,
1550 Attempt: attempt,
1551 PreviousRunID: source.ID,
1552 Origin: mutation.Origin,
1553 NetworkChannel: source.NetworkChannel,
1554 CoordinationChannelID: source.CoordinationChannelID,
1555 Metadata: cloneRawJSON(mutation.Metadata),
1556 QueuedAt: queuedAt,
1557 }
1558 s.runs[run.ID] = cloneTaskRun(run)
1559 return RetryRunResult{PreviousRun: cloneTaskRun(failed), Run: cloneTaskRun(run)}, nil
1560}
1561
1562func (s *inMemoryManagerStore) MarkTaskRunNeedsAttention(
1563 _ context.Context,

Callers

nothing calls this directly

Calls 5

cloneTaskRunFunction · 0.85
cloneRawJSONFunction · 0.70
NormalizeMethod · 0.45
IsZeroMethod · 0.45
NowMethod · 0.45

Tested by

no test coverage detected