Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

delegation

Fan a request out to peer runtimes; tolerate partial failure. The load-bearing pattern is JobMux: a single reader on client.events() fans envelopes out to per-job tokio::sync::mpsc channels.

Before ARCP

Parallel for await env in client.events() loops starve each other — only one wins per await. Without a mux you serialize everything.

With ARCP

let mux = JobMux::new();
mux.start(Arc::clone(&client));
for peer in PEERS {
    let job = delegate(&client, peer, request, trace_id).await;
    mux.register(job.job_id.clone()).await;
}
let completed = futures::future::join_all(jobs.iter().map(|j| collect(&mux, j))).await;

trace_id propagates so peers join one distributed trace.

ARCP primitives

  • agent.delegate — §14.
  • job.accepted / job.completed / job.failed / job.cancelled — §10.
  • trace_id propagation across peers — §17.
  • idempotency_key for re-delegation safety — §6.4.

File tour

  • main.rs — fan-out + JobMux + collect.
  • synth.rs — final synthesis stub.

Variations

  • Add a fastest-wins variant: cancel laggards once min_results arrive.
  • Rebalance: track per-peer P50 latency from past runs to pick the best target order.