Page MenuHomePhabricator

D19752.id47184.diff
No OneTemporary

D19752.id47184.diff

diff --git a/resources/sql/autopatches/20181024.drydock.01.commandprops.sql b/resources/sql/autopatches/20181024.drydock.01.commandprops.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20181024.drydock.01.commandprops.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_drydock.drydock_command
+ ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT};
diff --git a/resources/sql/autopatches/20181024.drydock.02.commanddefaults.sql b/resources/sql/autopatches/20181024.drydock.02.commanddefaults.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20181024.drydock.02.commanddefaults.sql
@@ -0,0 +1,2 @@
+UPDATE {$NAMESPACE}_drydock.drydock_command
+ SET properties = '{}' WHERE properties = '';
diff --git a/src/applications/drydock/storage/DrydockCommand.php b/src/applications/drydock/storage/DrydockCommand.php
--- a/src/applications/drydock/storage/DrydockCommand.php
+++ b/src/applications/drydock/storage/DrydockCommand.php
@@ -11,6 +11,7 @@
protected $targetPHID;
protected $command;
protected $isConsumed;
+ protected $properties = array();
private $commandTarget = self::ATTACHABLE;
@@ -22,6 +23,9 @@
protected function getConfiguration() {
return array(
+ self::CONFIG_SERIALIZATION => array(
+ 'properties' => self::SERIALIZATION_JSON,
+ ),
self::CONFIG_COLUMN_SCHEMA => array(
'command' => 'text32',
'isConsumed' => 'bool',
@@ -43,6 +47,14 @@
return $this->assertAttached($this->commandTarget);
}
+ public function setProperty($key, $value) {
+ $this->properties[$key] = $value;
+ return $this;
+ }
+
+ public function getProperty($key, $default = null) {
+ return idx($this->properties, $key, $default);
+ }
/* -( PhabricatorPolicyInterface )----------------------------------------- */
diff --git a/src/applications/drydock/worker/DrydockResourceUpdateWorker.php b/src/applications/drydock/worker/DrydockResourceUpdateWorker.php
--- a/src/applications/drydock/worker/DrydockResourceUpdateWorker.php
+++ b/src/applications/drydock/worker/DrydockResourceUpdateWorker.php
@@ -150,6 +150,13 @@
$this->releaseResource($resource, $reclaimer_phid);
break;
}
+
+ // If the command specifies that other worker tasks should be awakened
+ // after it executes, awaken them now.
+ $awaken_ids = $command->getProperty('awakenTaskIDs');
+ if (is_array($awaken_ids) && $awaken_ids) {
+ PhabricatorWorker::awakenTaskIDs($awaken_ids);
+ }
}
diff --git a/src/applications/drydock/worker/DrydockWorker.php b/src/applications/drydock/worker/DrydockWorker.php
--- a/src/applications/drydock/worker/DrydockWorker.php
+++ b/src/applications/drydock/worker/DrydockWorker.php
@@ -241,10 +241,15 @@
DrydockLease $lease) {
$viewer = $this->getViewer();
+ // When the resource releases, we we want to reawaken this task since it
+ // should be able to start building a new resrouce right away.
+ $worker_task_id = $this->getCurrentWorkerTaskID();
+
$command = DrydockCommand::initializeNewCommand($viewer)
->setTargetPHID($resource->getPHID())
->setAuthorPHID($lease->getPHID())
->setCommand(DrydockCommand::COMMAND_RECLAIM)
+ ->setProperty('awakenTaskIDs', array($worker_task_id))
->save();
$resource->scheduleUpdate();

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 14, 11:08 AM (4 d, 9 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7655241
Default Alt Text
D19752.id47184.diff (3 KB)

Event Timeline