Expand description
Deferred node (fan-in barrier) support for graph workflows.
Provides fan-in barrier semantics for nodes that wait on multiple upstream parallel paths before executing. This enables scatter-gather patterns where work is distributed across parallel branches and then collected at a single synchronization point.
§Overview
A deferred node is declared with a DeferredNodeConfig that specifies:
MergeStrategy: How upstream outputs are combined (collect, merge maps, first, or custom).fan_in_timeout: Optional maximum wait duration for all upstream paths.
The FanInTracker tracks which upstream paths have completed and merges
their outputs according to the configured strategy.
§Example
use std::time::Duration;
use adk_graph::deferred::{DeferredNodeConfig, FanInTracker, MergeStrategy};
use serde_json::json;
// Configure a deferred node that collects all upstream outputs
let config = DeferredNodeConfig {
merge_strategy: MergeStrategy::Collect,
fan_in_timeout: Some(Duration::from_secs(30)),
};
// Track upstream completions
let mut tracker = FanInTracker::new(vec!["branch_a", "branch_b", "branch_c"]);
tracker.record("branch_a", json!({"result": 1}));
tracker.record("branch_b", json!({"result": 2}));
assert!(!tracker.is_ready());
tracker.record("branch_c", json!({"result": 3}));
assert!(tracker.is_ready());
// Merge outputs using the configured strategy
let merged = tracker.merge(&config.merge_strategy);
assert_eq!(merged, json!([{"result": 1}, {"result": 2}, {"result": 3}]));Structs§
- Deferred
Node Config - Configuration for a deferred (fan-in) node.
- FanIn
Tracker - Tracks which upstream paths have completed for a deferred node.
Enums§
- Merge
Strategy - How to combine outputs from multiple upstream parallel paths.