mirror of
https://github.com/kemko/nomad.git
synced 2026-01-03 08:55:43 +03:00
We introduce an alternative solution to the one presented in #24960 which is based on the state store and not previous-next allocation tracking in the reconciler. This new solution reduces cognitive complexity of the scheduler code at the cost of slightly more boilerplate code, but also opens up new possibilities in the future, e.g., allowing users to explicitly "un-stick" volumes with workloads still running. The diagram below illustrates the new logic: SetVolumes() upsertAllocsImpl() sets ns, job +-----------------checks if alloc requests tg in the scheduler v sticky vols and consults | +-----------------------+ state. If there is no claim, | | TaskGroupVolumeClaim: | it creates one. | | - namespace | | | - jobID | | | - tg name | | | - vol ID | v | uniquely identify vol | hasVolumes() +----+------------------+ consults the state | ^ and returns true | | DeleteJobTxn() if there's a match <-----------+ +---------------removes the claim from or if there is no the state previous claim | | | | +-----------------------------+ +------------------------------------------------------+ scheduler state store
19 KiB
19 KiB