// Package allocator aims to manage allocation of different // cluster-wide resources on behalf of the manager. In particular, it // manages a set of independent allocator processes which can mostly // execute concurrently with only a minimal need for coordination. // // One of the instances where it needs coordination is when deciding to // move a task to the PENDING state. Since a task can move to the // PENDING state only when all the task allocators have completed, // they must cooperate. The way `allocator` achieves this is by creating // a `taskBallot` to which all task allocators register themselves as // mandatory voters. For each task that needs allocation, each allocator // independently votes to indicate the completion of their allocation. // Once all registered voters have voted then the task is moved to the // PENDING state. // // Other than the coordination needed for task PENDING state, all // the allocators function fairly independently. package allocator