1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-26 08:42:41 +01:00

Remove the "25% of active pool" growth rate throttle from Drydock

Summary:
Ref T13677. Drydock has a hard-coded and fairly arbitrary limit which prevents a resource pool from growing more than 25% at once.

This is vaguely reasonable for resources which allocate quickly, but suffocating for slower resources. It's also wholly arbitrary, and the "one per lease" limit introduced in D21807 should do a better job of covering the same ground while generally being more reasonable, expected, and predictable.

Test Plan: Ran Drydock allocations without the throttle, saw faster pool growth.

Subscribers: yelirekim, PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13677

Differential Revision: https://secure.phabricator.com/D21808
This commit is contained in:
epriestley 2022-05-09 10:04:09 -07:00
parent 62360ea406
commit 1835ca1918

View file

@ -506,28 +506,21 @@ abstract class DrydockBlueprintImplementation extends Phobject {
protected function shouldLimitAllocatingPoolSize( protected function shouldLimitAllocatingPoolSize(
DrydockBlueprint $blueprint) { DrydockBlueprint $blueprint) {
// TODO: If this mechanism sticks around, these values should be
// configurable by the blueprint implementation.
// Limit on total number of active resources. // Limit on total number of active resources.
$total_limit = $this->getConcurrentResourceLimit($blueprint); $total_limit = $this->getConcurrentResourceLimit($blueprint);
if ($total_limit === null) {
// Always allow at least this many allocations to be in flight at once. return false;
$min_allowed = 1; }
// Allow this fraction of allocating resources as a fraction of active
// resources.
$growth_factor = 0.25;
$resource = new DrydockResource(); $resource = new DrydockResource();
$conn_r = $resource->establishConnection('r'); $conn = $resource->establishConnection('r');
$counts = queryfx_all( $counts = queryfx_all(
$conn_r, $conn,
'SELECT status, COUNT(*) N FROM %T 'SELECT status, COUNT(*) N FROM %R
WHERE blueprintPHID = %s AND status != %s WHERE blueprintPHID = %s AND status != %s
GROUP BY status', GROUP BY status',
$resource->getTableName(), $resource,
$blueprint->getPHID(), $blueprint->getPHID(),
DrydockResourceStatus::STATUS_DESTROYED); DrydockResourceStatus::STATUS_DESTROYED);
$counts = ipull($counts, 'N', 'status'); $counts = ipull($counts, 'N', 'status');
@ -539,29 +532,12 @@ abstract class DrydockBlueprintImplementation extends Phobject {
// If we're at the limit on total active resources, limit additional // If we're at the limit on total active resources, limit additional
// allocations. // allocations.
if ($total_limit !== null) { $n_total = ($n_alloc + $n_active + $n_broken + $n_released);
$n_total = ($n_alloc + $n_active + $n_broken + $n_released); if ($n_total >= $total_limit) {
if ($n_total >= $total_limit) { return true;
return true;
}
} }
// If the number of in-flight allocations is fewer than the minimum number return false;
// of allowed allocations, don't impose a limit.
if ($n_alloc < $min_allowed) {
return false;
}
$allowed_alloc = (int)ceil($n_active * $growth_factor);
// If the number of in-flight allocation is fewer than the number of
// allowed allocations according to the pool growth factor, don't impose
// a limit.
if ($n_alloc < $allowed_alloc) {
return false;
}
return true;
} }
} }