ClaimRun transitions one queued run into the claimed state.
( ctx context.Context, runID string, claim ClaimRun, actor ActorContext, )
| 1890 | |
| 1891 | // ClaimRun transitions one queued run into the claimed state. |
| 1892 | func (m *Service) ClaimRun( |
| 1893 | ctx context.Context, |
| 1894 | runID string, |
| 1895 | claim ClaimRun, |
| 1896 | actor ActorContext, |
| 1897 | ) (*Run, error) { |
| 1898 | if err := requireWriteAuthority(actor); err != nil { |
| 1899 | return nil, err |
| 1900 | } |
| 1901 | |
| 1902 | normalizedClaim, err := normalizeClaimRun(claim) |
| 1903 | if err != nil { |
| 1904 | return nil, err |
| 1905 | } |
| 1906 | if err := requireLifecycleIdempotency(actor, normalizedClaim.IdempotencyKey, "claim_run"); err != nil { |
| 1907 | return nil, err |
| 1908 | } |
| 1909 | |
| 1910 | run, taskRecord, err := m.loadRunWithTask(ctx, runID) |
| 1911 | if err != nil { |
| 1912 | return nil, err |
| 1913 | } |
| 1914 | if err := m.ensureTaskExecutable(ctx, taskRecord); err != nil { |
| 1915 | return nil, err |
| 1916 | } |
| 1917 | if err := requireRunTransition(run, TaskRunStatusClaimed); err != nil { |
| 1918 | return nil, err |
| 1919 | } |
| 1920 | if err := validateExplicitRunClaimOwner(taskRecord, actor); err != nil { |
| 1921 | return nil, err |
| 1922 | } |
| 1923 | if err := m.dispatchTaskRunPreClaim(ctx, run, taskRecord, actor); err != nil { |
| 1924 | return nil, err |
| 1925 | } |
| 1926 | |
| 1927 | run.Status = TaskRunStatusClaimed |
| 1928 | run.ClaimedBy = &ActorIdentity{Kind: actor.Actor.Kind, Ref: actor.Actor.Ref} |
| 1929 | run.ClaimedAt = m.now().UTC() |
| 1930 | if err := m.store.UpdateTaskRun(ctx, run); err != nil { |
| 1931 | return nil, err |
| 1932 | } |
| 1933 | |
| 1934 | reconciledTask, err := m.reconcileTaskCascade(ctx, run.TaskID) |
| 1935 | if err != nil { |
| 1936 | return nil, err |
| 1937 | } |
| 1938 | if err := m.recordTaskEvent(ctx, run.TaskID, run.ID, taskEventRunClaimed, actor, runClaimedPayload{ |
| 1939 | Status: run.Status, |
| 1940 | TaskStatus: reconciledTask.Status, |
| 1941 | ClaimedBy: *run.ClaimedBy, |
| 1942 | }); err != nil { |
| 1943 | return nil, err |
| 1944 | } |
| 1945 | m.dispatchTaskRunPostClaim(ctx, run, reconciledTask, actor) |
| 1946 | |
| 1947 | return &run, nil |
| 1948 | } |
| 1949 |
nothing calls this directly
no test coverage detected