From 201e0d29435c27c582fc909a3342801327e69cc0 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 22 Jan 2021 14:55:53 -0800 Subject: [PATCH] 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 --- resources/sql/autopatches/20210122.queuecontainer.01.sql | 5 +++++ src/infrastructure/daemon/workers/PhabricatorWorker.php | 5 ++++- .../daemon/workers/storage/PhabricatorWorkerActiveTask.php | 1 + .../daemon/workers/storage/PhabricatorWorkerArchiveTask.php | 1 + .../daemon/workers/storage/PhabricatorWorkerTask.php | 5 +++++ 5 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 resources/sql/autopatches/20210122.queuecontainer.01.sql diff --git a/resources/sql/autopatches/20210122.queuecontainer.01.sql b/resources/sql/autopatches/20210122.queuecontainer.01.sql new file mode 100644 index 0000000000..29d761f075 --- /dev/null +++ b/resources/sql/autopatches/20210122.queuecontainer.01.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD containerPHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_worker.worker_archivetask + ADD containerPHID VARBINARY(64); diff --git a/src/infrastructure/daemon/workers/PhabricatorWorker.php b/src/infrastructure/daemon/workers/PhabricatorWorker.php index 95e91cf7d5..c62fde447f 100644 --- a/src/infrastructure/daemon/workers/PhabricatorWorker.php +++ b/src/infrastructure/daemon/workers/PhabricatorWorker.php @@ -134,6 +134,7 @@ abstract class PhabricatorWorker extends Phobject { array( 'priority' => 'optional int|null', 'objectPHID' => 'optional string|null', + 'containerPHID' => 'optional string|null', 'delayUntil' => 'optional int|null', )); @@ -142,12 +143,14 @@ abstract class PhabricatorWorker extends Phobject { $priority = self::PRIORITY_DEFAULT; } $object_phid = idx($options, 'objectPHID'); + $container_phid = idx($options, 'containerPHID'); $task = id(new PhabricatorWorkerActiveTask()) ->setTaskClass($task_class) ->setData($data) ->setPriority($priority) - ->setObjectPHID($object_phid); + ->setObjectPHID($object_phid) + ->setContainerPHID($container_phid); $delay = idx($options, 'delayUntil'); if ($delay) { diff --git a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php index dfb2bf159d..dad67fc4b3 100644 --- a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php +++ b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php @@ -116,6 +116,7 @@ final class PhabricatorWorkerActiveTask extends PhabricatorWorkerTask { ->setDataID($this->getDataID()) ->setPriority($this->getPriority()) ->setObjectPHID($this->getObjectPHID()) + ->setContainerPHID($this->getContainerPHID()) ->setResult($result) ->setDuration($duration) ->setDateCreated($this->getDateCreated()) diff --git a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php index 25a453b47b..b5c5e2b820 100644 --- a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php +++ b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php @@ -87,6 +87,7 @@ final class PhabricatorWorkerArchiveTask extends PhabricatorWorkerTask { ->setDataID($this->getDataID()) ->setPriority($this->getPriority()) ->setObjectPHID($this->getObjectPHID()) + ->setContainerPHID($this->getContainerPHID()) ->setDateCreated($this->getDateCreated()) ->insert(); diff --git a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php index 2fc26503ea..4faae5c83b 100644 --- a/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php +++ b/src/infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php @@ -11,6 +11,7 @@ abstract class PhabricatorWorkerTask extends PhabricatorWorkerDAO { protected $dataID; protected $priority; protected $objectPHID; + protected $containerPHID; private $data; private $executionException; @@ -25,11 +26,15 @@ abstract class PhabricatorWorkerTask extends PhabricatorWorkerDAO { 'failureTime' => 'epoch?', 'priority' => 'uint32', 'objectPHID' => 'phid?', + 'containerPHID' => 'phid?', ), self::CONFIG_KEY_SCHEMA => array( 'key_object' => array( 'columns' => array('objectPHID'), ), + 'key_container' => array( + 'columns' => array('containerPHID'), + ), ), ) + parent::getConfiguration(); }