1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-10 23:01:04 +01:00

When a lease triggers a resource allocation for a resource which must activate, awaken the lease task after the resource activates

Summary:
Depends on D19753. Ref T13210. This is a small optimization that saves us from waiting up to 15 seconds for a yield.

When there are no Working Copy resources and a new lease comes in, we'll allocate one and yield until it activates.

If activating it (SSH'ing and running `git clone`) takes less than 15 seconds, the resource will activate (say, at T+4) but the lease won't update again for a while (say, until T+15). This leaves us with a pointless wait (in this example, we're sitting around for 9 seconds when we could move forward).

To improve this a little bit, let resources wake up the lease update tasks that triggered allocation after they activate. In the best case, that task runs ~15 seconds sooner. In the worst case, the awaken is just a no-op.

With a more-full queue, this has a smaller effect (it's likely something else will run and be able to use the resource in those 9 seconds).

With already-activated resources, this has no effect (when resources are already activated, we can lease immediately).

Test Plan:
  - Cleaned up all working copy resources.
  - Requested a new "A" working copy.
  - Before patch: got a working copy after 17-18 seconds, most of which was spent yielded.
  - After patch: got a working copy after 3-4 seconds.

Reviewers: amckinley

Reviewed By: amckinley

Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13210

Differential Revision: https://secure.phabricator.com/D19754
This commit is contained in:
epriestley 2018-10-24 09:26:24 -07:00
parent 78ab675bd8
commit f6122547d7
2 changed files with 12 additions and 0 deletions

View file

@ -599,6 +599,13 @@ final class DrydockLeaseUpdateWorker extends DrydockWorker {
'DrydockResourceUpdateWorker', 'DrydockResourceUpdateWorker',
array( array(
'resourcePHID' => $resource->getPHID(), 'resourcePHID' => $resource->getPHID(),
// This task will generally yield while the resource activates, so
// wake it back up once the resource comes online. Most of the time,
// we'll be able to lease the newly activated resource.
'awakenOnActivation' => array(
$this->getCurrentWorkerTaskID(),
),
), ),
array( array(
'objectPHID' => $resource->getPHID(), 'objectPHID' => $resource->getPHID(),

View file

@ -170,6 +170,11 @@ final class DrydockResourceUpdateWorker extends DrydockWorker {
$blueprint = $resource->getBlueprint(); $blueprint = $resource->getBlueprint();
$blueprint->activateResource($resource); $blueprint->activateResource($resource);
$this->validateActivatedResource($blueprint, $resource); $this->validateActivatedResource($blueprint, $resource);
$awaken_ids = $this->getTaskDataValue('awakenOnActivation');
if (is_array($awaken_ids) && $awaken_ids) {
PhabricatorWorker::awakenTaskIDs($awaken_ids);
}
} }