(ctx context.Context, root Task)
| 1067 | } |
| 1068 | |
| 1069 | func (m *Service) ensureTaskCancelable(ctx context.Context, root Task) error { |
| 1070 | rootRuns, rootStatus, err := m.loadTaskRuntimeState(ctx, root) |
| 1071 | if err != nil { |
| 1072 | return err |
| 1073 | } |
| 1074 | if isTerminalTaskStatus(rootStatus) && rootStatus != TaskStatusCanceled && !hasOpenRun(rootRuns) { |
| 1075 | return fmt.Errorf( |
| 1076 | "%w: task %q cannot transition from %q to %q", |
| 1077 | ErrInvalidStatusTransition, |
| 1078 | root.ID, |
| 1079 | rootStatus, |
| 1080 | TaskStatusCanceled, |
| 1081 | ) |
| 1082 | } |
| 1083 | return nil |
| 1084 | } |
| 1085 | |
| 1086 | func (m *Service) cancelTaskTreeRecord( |
| 1087 | ctx context.Context, |
no test coverage detected