1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-19 16:58:48 +02:00

Add support for a "containerPHID" in the worker queue

Summary:
Ref T13591. Worker queue tasks which affect commits currently (mostly) store the commit as an "objectPHID", but do not directly reference the repository the commit belongs to.

This can make certain operations (like "change the priority of all tasks affecting repository Y") more difficult than it needs to be.

Support a "containerPHID", similar to the field of the same name on builds, that can store a parent object like a repository and better support operations against subsets of tasks.

See also D11044 for the genesis of "objectPHID".

This depends on the introduction of storage patch phases (in D21529) so that earlier migrations which queue worker tasks don't try to insert this column before it actually exists.

Test Plan:
  - Ran `bin/storage upgrade`.
  - No callers yet, see further changes for usage.

Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13591

Differential Revision: https://secure.phabricator.com/D21531
This commit is contained in:
epriestley 2021-01-22 14:55:53 -08:00
parent 32942f6232
commit 201e0d2943
5 changed files with 16 additions and 1 deletions

View file

@ -0,0 +1,5 @@
ALTER TABLE {$NAMESPACE}_worker.worker_activetask
ADD containerPHID VARBINARY(64);
ALTER TABLE {$NAMESPACE}_worker.worker_archivetask
ADD containerPHID VARBINARY(64);

View file

@ -134,6 +134,7 @@ abstract class PhabricatorWorker extends Phobject {
array( array(
'priority' => 'optional int|null', 'priority' => 'optional int|null',
'objectPHID' => 'optional string|null', 'objectPHID' => 'optional string|null',
'containerPHID' => 'optional string|null',
'delayUntil' => 'optional int|null', 'delayUntil' => 'optional int|null',
)); ));
@ -142,12 +143,14 @@ abstract class PhabricatorWorker extends Phobject {
$priority = self::PRIORITY_DEFAULT; $priority = self::PRIORITY_DEFAULT;
} }
$object_phid = idx($options, 'objectPHID'); $object_phid = idx($options, 'objectPHID');
$container_phid = idx($options, 'containerPHID');
$task = id(new PhabricatorWorkerActiveTask()) $task = id(new PhabricatorWorkerActiveTask())
->setTaskClass($task_class) ->setTaskClass($task_class)
->setData($data) ->setData($data)
->setPriority($priority) ->setPriority($priority)
->setObjectPHID($object_phid); ->setObjectPHID($object_phid)
->setContainerPHID($container_phid);
$delay = idx($options, 'delayUntil'); $delay = idx($options, 'delayUntil');
if ($delay) { if ($delay) {

View file

@ -116,6 +116,7 @@ final class PhabricatorWorkerActiveTask extends PhabricatorWorkerTask {
->setDataID($this->getDataID()) ->setDataID($this->getDataID())
->setPriority($this->getPriority()) ->setPriority($this->getPriority())
->setObjectPHID($this->getObjectPHID()) ->setObjectPHID($this->getObjectPHID())
->setContainerPHID($this->getContainerPHID())
->setResult($result) ->setResult($result)
->setDuration($duration) ->setDuration($duration)
->setDateCreated($this->getDateCreated()) ->setDateCreated($this->getDateCreated())

View file

@ -87,6 +87,7 @@ final class PhabricatorWorkerArchiveTask extends PhabricatorWorkerTask {
->setDataID($this->getDataID()) ->setDataID($this->getDataID())
->setPriority($this->getPriority()) ->setPriority($this->getPriority())
->setObjectPHID($this->getObjectPHID()) ->setObjectPHID($this->getObjectPHID())
->setContainerPHID($this->getContainerPHID())
->setDateCreated($this->getDateCreated()) ->setDateCreated($this->getDateCreated())
->insert(); ->insert();

View file

@ -11,6 +11,7 @@ abstract class PhabricatorWorkerTask extends PhabricatorWorkerDAO {
protected $dataID; protected $dataID;
protected $priority; protected $priority;
protected $objectPHID; protected $objectPHID;
protected $containerPHID;
private $data; private $data;
private $executionException; private $executionException;
@ -25,11 +26,15 @@ abstract class PhabricatorWorkerTask extends PhabricatorWorkerDAO {
'failureTime' => 'epoch?', 'failureTime' => 'epoch?',
'priority' => 'uint32', 'priority' => 'uint32',
'objectPHID' => 'phid?', 'objectPHID' => 'phid?',
'containerPHID' => 'phid?',
), ),
self::CONFIG_KEY_SCHEMA => array( self::CONFIG_KEY_SCHEMA => array(
'key_object' => array( 'key_object' => array(
'columns' => array('objectPHID'), 'columns' => array('objectPHID'),
), ),
'key_container' => array(
'columns' => array('containerPHID'),
),
), ),
) + parent::getConfiguration(); ) + parent::getConfiguration();
} }