jobq: a job asks for the ids it wants back
The operator's instruction on the issue was "the closure returns an array of guids, and enqueue_job returns the node ids in that order". What was here instead returned a HashMap of everything inserted, and no caller used the keys: submit dropped the return, insert_group did into_values(), and the scheduler ignored what append_subgraph handed back. The guid-keyed lookup was dead weight, and into_values() made that Vec arbitrarily ordered -- harmless only because nothing read it. insert_job now takes FnOnce(&JobBuilder) -> Vec<NodeGuid> and returns the matching ids positionally. A handle from another job is UnknownNode rather than a silent omission: the return is positional, so a short vector would misalign every id after it. c0re's Declare stays FnOnce(&Job) and the wrapper names no handles in one place, rather than ending seven templates in an empty vector -- a DAG is addressed by its container node, which submit inserts itself. That frees insert_group from needing every id, so the node_rt pre-seeding goes too: NodeRuntime is one Option field and every reader already tolerated a missing entry (entry().or_default(), get().and_then(), iter().find()). The tests are the argument for the shape: capturing a handle through a mutable binding to look it up in the map afterwards collapses into returning it and destructuring the result.
This commit is contained in:
parent
c82853af5a
commit
bf138ae79a
7 changed files with 147 additions and 76 deletions
|
|
@ -57,7 +57,8 @@ hand-maintained per-file tree drifts out of sync with the code.
|
|||
- **`hive-jobq/`** — persistent job-DAG scheduler, extracted from
|
||||
hive-c0re's in-tree `job_queue` as a domain-agnostic library. One
|
||||
persistent graph for the whole system (not a DAG per job); enqueuing
|
||||
inserts a self-contained sub-DAG and returns its node ids. Generic over
|
||||
inserts a self-contained sub-DAG and returns the ids of the nodes the job
|
||||
asked for, in the order it named them. Generic over
|
||||
the node payload `N` and the resource name `R`; resource deps are named
|
||||
counting semaphores acquired all-or-nothing at node start. `hive-c0re`'s
|
||||
remaining `job_queue/` module is the c0re-specific layer *over* this
|
||||
|
|
|
|||
Loading…
Reference in a new issue