executePlan walks the plan DAG, executing nodes in parallel where possible while respecting dependency edges. It emits progress events and handles group-based event aggregation for composite operations like recreate.
(ctx context.Context, project *types.Project, observed *ObservedState, plan *Plan)
| 69 | // while respecting dependency edges. It emits progress events and handles |
| 70 | // group-based event aggregation for composite operations like recreate. |
| 71 | func (s *composeService) executePlan(ctx context.Context, project *types.Project, observed *ObservedState, plan *Plan) error { |
| 72 | return s.newPlanExecutor(project, observed).run(ctx, plan) |
| 73 | } |
| 74 | |
| 75 | // newPlanExecutor constructs a planExecutor seeded from the observed state. |
| 76 | // Split out from executePlan so tests can inspect the executor's live state |