Concurrency and pools

Jobman uses durable local admission records to limit active work across independent CLI invocations. There is one store-wide slot capacity and optional named pools.

Configure capacities

schema_version: 1
concurrency:
  max_active_slots: 8
  pools:
    downloads: 2
    experiments: 4

Apply without submitting a job:

$ jobman config validate
$ jobman config apply

run, rerun, and policy-based cleanup also synchronize effective durable capacities. Removing a pool fails while active admission records still refer to it.

Request slots

$ jobman run --slots 2 --pool experiments -- ./train-model

The request consumes two global slots and two slots from experiments. A request that exceeds a finite configured capacity is rejected instead of waiting for impossible admission.

Jobs without --pool consume only global slots. --slots defaults to one.

Fairness and leases

Eligible jobs wait in durable admission order. A supervisor renews its admission lease while it owns an active run. Slots are released after the run, including on terminal failure or cancellation; stale ownership is reconciled conservatively after its lease expires.

Admission limits active runs, not the number of submitted jobs or supervisors. Prerequisite and retry-delay time does not consume slots.

Local scope

Concurrency is scoped to one state store on one host. Jobman does not provide a distributed scheduler, cross-host lease service, or network filesystem coordination. Use an external orchestrator when capacity must be shared between machines.

Inspect a job’s current admission with jobman show --json JOB and store health with jobman doctor --json.