jobq: rename the builder parameters too, not just the alias
Renaming `pub type Job` fixed the definition and left every use site reading `b` and `job` — including `job: super::JobBuilder`, where the parameter still asserted it was a job while its type said otherwise. The propagation is what the issue was about, so the parameters are the half that matters at a call site. Two spots deliberately untouched: `auto_update`'s `sort_by(|a, b| …)` comparator, and the prose that means the job *queue* (main.rs's "Job-queue scheduler", scheduler.rs's "not this module's job any more", the "grown job rejected" log). 315 tests pass unchanged.
This commit is contained in:
parent
379c9bb570
commit
684f6da78e
6 changed files with 203 additions and 180 deletions
|
|
@ -28,7 +28,7 @@ pub const GRACEFUL_STOP_TIMEOUT: std::time::Duration = std::time::Duration::from
|
|||
/// scheduler spawns per claim; the `Result` (stringified) becomes the
|
||||
/// node's terminal state.
|
||||
///
|
||||
/// `job` is the node's own growth channel: an executor that decides more work
|
||||
/// `builder` is the node's own growth channel: an executor that decides more work
|
||||
/// is needed declares it here, and the scheduler inserts it under this node
|
||||
/// when the node completes. Most executors never touch it. Nothing is inserted
|
||||
/// while the node runs — the builder is local state, so this stays outside the
|
||||
|
|
@ -48,15 +48,15 @@ pub const GRACEFUL_STOP_TIMEOUT: std::time::Duration = std::time::Duration::from
|
|||
/// themselves. Nothing here needs a claim to exist as a type.
|
||||
pub(super) async fn run_node(
|
||||
coord: &Arc<Coordinator>,
|
||||
job: super::JobBuilder,
|
||||
builder: super::JobBuilder,
|
||||
id: NodeId,
|
||||
kind: &NodeKind,
|
||||
) -> (super::JobBuilder, Result<()>) {
|
||||
// The agent this node targets rides the payload — empty for the agentless
|
||||
// container kinds (`MetaLock`, `Dag`), which never read it.
|
||||
let agent = kind.agent();
|
||||
// Every arm is `Result<()>`; the three that grow work declare into `job`
|
||||
// *synchronously*, after their own awaits have finished. Borrowing `&job`
|
||||
// Every arm is `Result<()>`; the three that grow work declare into `builder`
|
||||
// *synchronously*, after their own awaits have finished. Borrowing `&builder`
|
||||
// inside an `.await` would make this future non-`Send` (see above), so the
|
||||
// growth executors return what to grow rather than taking the builder.
|
||||
let result = match kind {
|
||||
|
|
@ -79,14 +79,14 @@ pub(super) async fn run_node(
|
|||
// than returned, since `run_meta_lock` would only be deriving
|
||||
// it from the `sweep` this call site already holds.
|
||||
if *sweep {
|
||||
super::templates::grown_graceful_rebuilds(&job, &agents, true);
|
||||
super::templates::grown_graceful_rebuilds(&builder, &agents, true);
|
||||
} else {
|
||||
super::templates::grown_rebuilds(&job, &agents, false);
|
||||
super::templates::grown_rebuilds(&builder, &agents, false);
|
||||
}
|
||||
}),
|
||||
NodeKind::Reconcile { .. } => run_reconcile(coord, agent).await.map(|sub| {
|
||||
if let Some(kind) = sub {
|
||||
super::templates::fanned_out_mechanical(&job, kind);
|
||||
super::templates::fanned_out_mechanical(&builder, kind);
|
||||
}
|
||||
}),
|
||||
NodeKind::Start { .. } => run_start(coord, agent).await,
|
||||
|
|
@ -106,7 +106,7 @@ pub(super) async fn run_node(
|
|||
NodeKind::MergeVerify { approval_id, .. } => run_merge_verify(coord, *approval_id).await,
|
||||
NodeKind::DeployApply { approval_id, .. } => {
|
||||
run_deploy_apply(coord, *approval_id).await.map(|()| {
|
||||
super::templates::deploy_rebuild_nodes(&job, agent, *approval_id);
|
||||
super::templates::deploy_rebuild_nodes(&builder, agent, *approval_id);
|
||||
})
|
||||
}
|
||||
NodeKind::FinalizeDeploy { approval_id, .. } => {
|
||||
|
|
@ -132,7 +132,7 @@ pub(super) async fn run_node(
|
|||
// and build slot it declares stay held until its subtree settles.
|
||||
NodeKind::Dag { .. } | NodeKind::DeployWindow { .. } => Ok(()),
|
||||
};
|
||||
(job, result)
|
||||
(builder, result)
|
||||
}
|
||||
|
||||
/// Resolve the DAG's approval row the way this node's own `outcome` says.
|
||||
|
|
@ -368,7 +368,7 @@ async fn run_meta_lock(
|
|||
/// Idempotent power-converge *planner*: compare `wanted` (durable
|
||||
/// intent) against observed state and, when they diverge, fan the
|
||||
/// mechanical `Start` / `Stop` out as a first-class node appended to
|
||||
/// *this* DAG (a single node declared into `job`, rooted on this node).
|
||||
/// *this* DAG (a single node declared into `builder`, rooted on this node).
|
||||
/// Does no container work itself — the sub-step becomes visible in the
|
||||
/// DAG and the lease-window transient (or the sub-step's own node-local
|
||||
/// guard) rides across it.
|
||||
|
|
|
|||
Loading…
Reference in a new issue