split Swap's Ok-tail into a first-class PostSwap DAG node (#2390)
This commit is contained in:
parent
e646241acd
commit
f2ff0deb6b
4 changed files with 126 additions and 43 deletions
|
|
@ -16,7 +16,7 @@
|
|||
//! intent+reconcile is atomic per-agent).
|
||||
//!
|
||||
//! ```text
|
||||
//! rebuild(a): Prebuild(a) → StopForUpdate(a) → Swap(a) →(any) Reconcile(a)
|
||||
//! rebuild(a): Prebuild(a) → StopForUpdate(a) → Swap(a) →(ok) PostSwap(a) →(any) Reconcile(a)
|
||||
//! spawn(a): Provision(a) → Create(a) → WriteDropin(a) → Reconcile(a) [wanted=Up at approve]
|
||||
//! perm-change(a): WritePermFile(a) → «rebuild subgraph»
|
||||
//! meta-update(inp): MetaLock(inp) →«in-DAG rebuild subgraph per affected a»
|
||||
|
|
@ -50,10 +50,16 @@ pub(crate) fn node(agent: &str, kind: NodeKind, deps: Vec<Dep>) -> NodeSpec {
|
|||
}
|
||||
}
|
||||
|
||||
/// The rebuild node chain. `Reconcile` deps on `Swap` with `AfterAny`:
|
||||
/// it must run even when the profile swap failed, so a previously-up
|
||||
/// agent comes back on its old config (today's recovery-start). This
|
||||
/// is the only `AfterAny` edge in v1.
|
||||
/// The rebuild node chain. `PostSwap` carries the swap's Ok-only
|
||||
/// bookkeeping tail (rev marker, forge/matrix sync, kick, rescan) and deps
|
||||
/// `Swap` with `AfterOk`. `Reconcile` then deps on `PostSwap` with
|
||||
/// `AfterAny`: it must run even when the swap failed, so a previously-up
|
||||
/// agent comes back on its old config (today's recovery-start). On swap
|
||||
/// failure the `AfterOk` `PostSwap` is cancel-cascaded to a terminal state,
|
||||
/// which still satisfies `Reconcile`'s `AfterAny` edge — the only `AfterAny`
|
||||
/// edge in v1. Pointing `Reconcile` at `PostSwap` (not `Swap`) also
|
||||
/// serializes the tail ahead of the reconcile, so there's no double
|
||||
/// rescan/kick race.
|
||||
pub(crate) fn rebuild_nodes(agent: &str, relock: bool, base: u32) -> Vec<NodeSpec> {
|
||||
vec![
|
||||
node(
|
||||
|
|
@ -67,11 +73,12 @@ pub(crate) fn rebuild_nodes(agent: &str, relock: bool, base: u32) -> Vec<NodeSpe
|
|||
),
|
||||
node(agent, NodeKind::StopForUpdate, after_ok(base)),
|
||||
node(agent, NodeKind::Swap, after_ok(base + 1)),
|
||||
node(agent, NodeKind::PostSwap, after_ok(base + 2)),
|
||||
node(
|
||||
agent,
|
||||
NodeKind::Reconcile,
|
||||
vec![Dep {
|
||||
on: base + 2,
|
||||
on: base + 3,
|
||||
when: DepWhen::AfterAny,
|
||||
}],
|
||||
),
|
||||
|
|
|
|||
Loading…
Reference in a new issue