110 using RetryPolicyLookup = std::function<
RetryPolicy(
const std::string&)>;
129 const std::map<std::string, std::unique_ptr<GraphNode>>& nodes,
130 const std::vector<ChannelDef>& channel_defs,
131 RetryPolicyLookup retry_policy_for,
132 asio::thread_pool* fan_out_pool =
nullptr,
136 NodeExecutor(
const std::map<std::string, std::unique_ptr<GraphNode>>& nodes,
137 const std::vector<ChannelDef>& channel_defs,
138 RetryPolicyLookup retry_policy_for,
139 std::shared_ptr<const GraphRegistry> registry,
140 asio::thread_pool* fan_out_pool =
nullptr,
159 const std::string& node_name,
162 const std::unordered_map<std::string, NodeResult>& replay,
164 const std::string& parent_cp_id,
166 std::vector<std::string>& trace,
182 const std::string& node_name,
207 const std::vector<std::string>& ready,
210 const std::unordered_map<std::string, NodeResult>& replay,
212 const std::string& parent_cp_id,
214 std::vector<std::string>& trace,
239 const std::vector<Send>& sends,
242 const std::unordered_map<std::string, NodeResult>& replay,
244 const std::string& parent_cp_id,
245 std::vector<std::string>& trace,
252 friend struct detail::AttemptsAccess;
259 asio::awaitable<std::vector<StepRouting>> run_sends_impl_async(
260 const std::vector<Send>& sends,
263 const std::unordered_map<std::string, NodeResult>& replay,
265 const std::string& parent_cp_id,
266 std::vector<std::string>& trace,
270 std::vector<json>* failure_records,
271 const detail::SendStep* send_step =
nullptr);
276 asio::awaitable<NodeResult> execute_attempts_async(
277 const std::string& node_name,
282 detail::InvocationSlot* slot);
288 asio::awaitable<void> run_dispatched_attempt_async(
293 detail::InvocationSlot* slot,
294 std::string_view effect_namespace,
295 const std::optional<int>& attempt_timeout,
296 const std::string& node_name,
298 std::optional<NodeResult>& ok_result,
299 std::exception_ptr& failure,
300 std::shared_ptr<detail::AttemptEffectLog>& effects,
301 bool& attempt_stopped,
302 bool& attempt_timed_out);
310 void apply_input(
GraphState& state,
const json& input)
const;
325 void maybe_warn_serial_fanout(std::size_t width)
const;
327 const std::map<std::string, std::unique_ptr<GraphNode>>& nodes_;
328 const std::vector<ChannelDef>& channel_defs_;
329 RetryPolicyLookup retry_policy_for_;
330 std::shared_ptr<const GraphRegistry> registry_;
331 asio::thread_pool* fan_out_pool_ =
nullptr;
333 mutable std::atomic<bool> warned_serial_fanout_{
false};
338 const detail::FailureRouting* failure_routing_ =
nullptr;
340 AttemptTimeoutLookup attempt_timeout_for_;
343 std::shared_ptr<detail::AttemptQuiescence> attempt_quiescence_;
asio::awaitable< NodeResult > run_one_async(const std::string &node_name, int step, GraphState &state, const std::unordered_map< std::string, NodeResult > &replay, CheckpointCoordinator &coord, const std::string &parent_cp_id, const BarrierState &barrier_state, std::vector< std::string > &trace, const GraphStreamCallback &cb, StreamMode stream_mode, const RunContext &ctx)
Execute a single node in the current super-step.
asio::awaitable< std::vector< NodeResult > > run_parallel_async(const std::vector< std::string > &ready, int step, GraphState &state, const std::unordered_map< std::string, NodeResult > &replay, CheckpointCoordinator &coord, const std::string &parent_cp_id, const BarrierState &barrier_state, std::vector< std::string > &trace, const GraphStreamCallback &cb, StreamMode stream_mode, const RunContext &ctx)
Execute all ready nodes concurrently via asio::experimental::make_parallel_group + wait_for_all.
asio::awaitable< std::vector< StepRouting > > run_sends_async(const std::vector< Send > &sends, int step, GraphState &state, const std::unordered_map< std::string, NodeResult > &replay, CheckpointCoordinator &coord, const std::string &parent_cp_id, std::vector< std::string > &trace, const GraphStreamCallback &cb, StreamMode stream_mode, const RunContext &ctx)
Execute a list of Send requests accumulated this step.
NodeExecutor(const std::map< std::string, std::unique_ptr< GraphNode > > &nodes, const std::vector< ChannelDef > &channel_defs, RetryPolicyLookup retry_policy_for, std::shared_ptr< const GraphRegistry > registry, asio::thread_pool *fan_out_pool=nullptr, NodeCache *node_cache=nullptr)
Construct with a per-engine registry overlay.
Per-run dispatch metadata threaded through the engine and executor.