Docker-machine: Ensure runner stays under limit when IdleCount is 0
What does this MR do?
When IdleCount
is 0, machines are always created on-demand before each job (if there is no available machine in Idle state). However, when IdleCount
were set to 0 and limit
were set to a positive value, the Runner would ignore the limit
and attempt to allocate a machine each time.
This change fixes that problem by updating idleLimitStrategy
with a new function, canCreateOnDemand
, to complement canCreateIdle
. The latter returns true if there is capacity to create idle machines for pre-scaling, while the former returns true if there is capacity for on-demand jobs.
We need to make this distinction to ensure that setting idleCount
to 0 does not create an infinite number of idle machines in pre-scaling.
When a build attempts to Acquire
a machine, we now call canCreateOnDemand
to check whether there is capacity to create a machine. We need to do this check before the runner proceeds to the Prepare
stage where Use
would attempt to allocate a machine. If we performed the check there, the job would fail if limit
were reached.
Relates to #36817 (closed)