Skip to main content

Module deferred

Module deferred 

Source
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§

DeferredNodeConfig
Configuration for a deferred (fan-in) node.
FanInTracker
Tracks which upstream paths have completed for a deferred node.

Enums§

MergeStrategy
How to combine outputs from multiple upstream parallel paths.