( ctx context.Context, taskRecord Task, run Run, recovery RunBootRecovery, actor ActorContext, previousStatus RunStatus, previousSessionID string, )
| 1349 | } |
| 1350 | |
| 1351 | func (m *Service) recoverRunByRequeue( |
| 1352 | ctx context.Context, |
| 1353 | taskRecord Task, |
| 1354 | run Run, |
| 1355 | recovery RunBootRecovery, |
| 1356 | actor ActorContext, |
| 1357 | previousStatus RunStatus, |
| 1358 | previousSessionID string, |
| 1359 | ) (*Run, error) { |
| 1360 | if previousStatus != TaskRunStatusClaimed { |
| 1361 | return nil, invalidRunRecoveryTransition(run, previousStatus, recovery.Action) |
| 1362 | } |
| 1363 | |
| 1364 | run.Status = TaskRunStatusQueued |
| 1365 | run.ClaimedBy = nil |
| 1366 | run.ClaimedAt = time.Time{} |
| 1367 | run.SessionID = "" |
| 1368 | run.ClaimToken = "" |
| 1369 | run.ClaimTokenHash = "" |
| 1370 | run.LeaseUntil = time.Time{} |
| 1371 | run.HeartbeatAt = time.Time{} |
| 1372 | run.StartedAt = time.Time{} |
| 1373 | run.EndedAt = time.Time{} |
| 1374 | run.Error = "" |
| 1375 | run.Result = nil |
| 1376 | if err := m.store.UpdateTaskRun(ctx, run); err != nil { |
| 1377 | return nil, err |
| 1378 | } |
| 1379 | reconciledTask, err := m.recordRecoveredRun( |
| 1380 | ctx, |
| 1381 | taskRecord.ID, |
| 1382 | run, |
| 1383 | recovery, |
| 1384 | actor, |
| 1385 | previousStatus, |
| 1386 | previousSessionID, |
| 1387 | ) |
| 1388 | if err != nil { |
| 1389 | return nil, err |
| 1390 | } |
| 1391 | m.dispatchTaskRunLeaseRecovered( |
| 1392 | ctx, |
| 1393 | run, |
| 1394 | reconciledTask, |
| 1395 | actor, |
| 1396 | previousStatus, |
| 1397 | previousSessionID, |
| 1398 | recovery, |
| 1399 | ) |
| 1400 | return &run, nil |
| 1401 | } |
| 1402 | |
| 1403 | func (m *Service) recoverRunByMarkRunning( |
| 1404 | ctx context.Context, |
no test coverage detected