@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator

Convert Drydock lease and resource constants to strings

Summary:
Ref T9252. Drydock currently uses integer statuses, but there's no reason for this (they don't need to be ordered) and it makes debugging them, working with them, future APIs, etc., more cumbersome.

Switch to string instead.

Also rename `STATUS_OPEN` to `STATUS_ACTIVE` and `STATUS_CLOSED` to `STATUS_RELEASED` for consistency. This makes resources and leases have more similar states, and gives resource states more accurate names.

Test Plan: Browsed web UI, grepped for changed constants, applied patch, inspected database.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T9252

Differential Revision: https://secure.phabricator.com/D14153

+78 -38
+39
resources/sql/autopatches/20150924.drydock.status.1.sql
··· 1 + ALTER TABLE {$NAMESPACE}_drydock.drydock_lease 2 + CHANGE status status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; 3 + 4 + UPDATE {$NAMESPACE}_drydock.drydock_lease 5 + SET status = 'pending' WHERE status = '0'; 6 + 7 + UPDATE {$NAMESPACE}_drydock.drydock_lease 8 + SET status = 'acquired' WHERE status = '5'; 9 + 10 + UPDATE {$NAMESPACE}_drydock.drydock_lease 11 + SET status = 'active' WHERE status = '1'; 12 + 13 + UPDATE {$NAMESPACE}_drydock.drydock_lease 14 + SET status = 'released' WHERE status = '2'; 15 + 16 + UPDATE {$NAMESPACE}_drydock.drydock_lease 17 + SET status = 'broken' WHERE status = '3'; 18 + 19 + UPDATE {$NAMESPACE}_drydock.drydock_lease 20 + SET status = 'destroyed' WHERE status = '4'; 21 + 22 + 23 + ALTER TABLE {$NAMESPACE}_drydock.drydock_resource 24 + CHANGE status status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; 25 + 26 + UPDATE {$NAMESPACE}_drydock.drydock_resource 27 + SET status = 'pending' WHERE status = '0'; 28 + 29 + UPDATE {$NAMESPACE}_drydock.drydock_resource 30 + SET status = 'active' WHERE status = '1'; 31 + 32 + UPDATE {$NAMESPACE}_drydock.drydock_resource 33 + SET status = 'released' WHERE status = '2'; 34 + 35 + UPDATE {$NAMESPACE}_drydock.drydock_resource 36 + SET status = 'broken' WHERE status = '3'; 37 + 38 + UPDATE {$NAMESPACE}_drydock.drydock_resource 39 + SET status = 'destroyed' WHERE status = '4';
+2 -2
src/applications/drydock/blueprint/DrydockAlmanacServiceHostBlueprintImplementation.php
··· 252 252 ->withStatuses( 253 253 array( 254 254 DrydockResourceStatus::STATUS_PENDING, 255 - DrydockResourceStatus::STATUS_OPEN, 256 - DrydockResourceStatus::STATUS_CLOSED, 255 + DrydockResourceStatus::STATUS_ACTIVE, 256 + DrydockResourceStatus::STATUS_RELEASED, 257 257 )) 258 258 ->execute(); 259 259
+6 -6
src/applications/drydock/constants/DrydockLeaseStatus.php
··· 2 2 3 3 final class DrydockLeaseStatus extends DrydockConstants { 4 4 5 - const STATUS_PENDING = 0; 6 - const STATUS_ACQUIRED = 5; 7 - const STATUS_ACTIVE = 1; 8 - const STATUS_RELEASED = 2; 9 - const STATUS_BROKEN = 3; 10 - const STATUS_DESTROYED = 4; 5 + const STATUS_PENDING = 'pending'; 6 + const STATUS_ACQUIRED = 'acquired'; 7 + const STATUS_ACTIVE = 'active'; 8 + const STATUS_RELEASED = 'released'; 9 + const STATUS_BROKEN = 'broken'; 10 + const STATUS_DESTROYED = 'destroyed'; 11 11 12 12 public static function getNameForStatus($status) { 13 13 $map = array(
+12 -12
src/applications/drydock/constants/DrydockResourceStatus.php
··· 2 2 3 3 final class DrydockResourceStatus extends DrydockConstants { 4 4 5 - const STATUS_PENDING = 0; 6 - const STATUS_OPEN = 1; 7 - const STATUS_CLOSED = 2; 8 - const STATUS_BROKEN = 3; 9 - const STATUS_DESTROYED = 4; 5 + const STATUS_PENDING = 'pending'; 6 + const STATUS_ACTIVE = 'active'; 7 + const STATUS_RELEASED = 'released'; 8 + const STATUS_BROKEN = 'broken'; 9 + const STATUS_DESTROYED = 'destroyed'; 10 10 11 11 public static function getNameForStatus($status) { 12 12 $map = array( 13 - self::STATUS_PENDING => pht('Pending'), 14 - self::STATUS_OPEN => pht('Open'), 15 - self::STATUS_CLOSED => pht('Closed'), 16 - self::STATUS_BROKEN => pht('Broken'), 17 - self::STATUS_DESTROYED => pht('Destroyed'), 13 + self::STATUS_PENDING => pht('Pending'), 14 + self::STATUS_ACTIVE => pht('Active'), 15 + self::STATUS_RELEASED => pht('Released'), 16 + self::STATUS_BROKEN => pht('Broken'), 17 + self::STATUS_DESTROYED => pht('Destroyed'), 18 18 ); 19 19 20 20 return idx($map, $status, pht('Unknown')); ··· 23 23 public static function getAllStatuses() { 24 24 return array( 25 25 self::STATUS_PENDING, 26 - self::STATUS_OPEN, 27 - self::STATUS_CLOSED, 26 + self::STATUS_ACTIVE, 27 + self::STATUS_RELEASED, 28 28 self::STATUS_BROKEN, 29 29 self::STATUS_DESTROYED, 30 30 );
+1 -1
src/applications/drydock/query/DrydockLeaseQuery.php
··· 98 98 if ($this->statuses !== null) { 99 99 $where[] = qsprintf( 100 100 $conn, 101 - 'status IN (%Ld)', 101 + 'status IN (%Ls)', 102 102 $this->statuses); 103 103 } 104 104
+1 -1
src/applications/drydock/query/DrydockResourceSearchEngine.php
··· 73 73 'statuses', 74 74 array( 75 75 DrydockResourceStatus::STATUS_PENDING, 76 - DrydockResourceStatus::STATUS_OPEN, 76 + DrydockResourceStatus::STATUS_ACTIVE, 77 77 )); 78 78 case 'all': 79 79 return $query;
+1 -1
src/applications/drydock/storage/DrydockLease.php
··· 60 60 'attributes' => self::SERIALIZATION_JSON, 61 61 ), 62 62 self::CONFIG_COLUMN_SCHEMA => array( 63 - 'status' => 'uint32', 63 + 'status' => 'text32', 64 64 'until' => 'epoch?', 65 65 'resourceType' => 'text128', 66 66 'ownerPHID' => 'phid?',
+9 -8
src/applications/drydock/storage/DrydockResource.php
··· 30 30 self::CONFIG_COLUMN_SCHEMA => array( 31 31 'name' => 'text255', 32 32 'ownerPHID' => 'phid?', 33 - 'status' => 'uint32', 33 + 'status' => 'text32', 34 34 'type' => 'text64', 35 35 ), 36 36 self::CONFIG_KEY_SCHEMA => array( 37 - 'key_phid' => null, 38 - 'phid' => array( 39 - 'columns' => array('phid'), 40 - 'unique' => true, 37 + 'key_type' => array( 38 + 'columns' => array('type', 'status'), 39 + ), 40 + 'key_blueprint' => array( 41 + 'columns' => array('blueprintPHID', 'status'), 41 42 ), 42 43 ), 43 44 ) + parent::getConfiguration(); ··· 107 108 } 108 109 109 110 if ($this->activateWhenAllocated) { 110 - $new_status = DrydockResourceStatus::STATUS_OPEN; 111 + $new_status = DrydockResourceStatus::STATUS_ACTIVE; 111 112 } else { 112 113 $new_status = DrydockResourceStatus::STATUS_PENDING; 113 114 } ··· 153 154 $this->openTransaction(); 154 155 155 156 $this 156 - ->setStatus(DrydockResourceStatus::STATUS_OPEN) 157 + ->setStatus(DrydockResourceStatus::STATUS_ACTIVE) 157 158 ->save(); 158 159 159 160 DrydockSlotLock::acquireLocks($this->getPHID(), $this->slotLocks); ··· 172 173 173 174 public function canRelease() { 174 175 switch ($this->getStatus()) { 175 - case DrydockResourceStatus::STATUS_CLOSED: 176 + case DrydockResourceStatus::STATUS_RELEASED: 176 177 case DrydockResourceStatus::STATUS_DESTROYED: 177 178 return false; 178 179 default:
+1 -1
src/applications/drydock/view/DrydockResourceListView.php
··· 29 29 case DrydockResourceStatus::STATUS_PENDING: 30 30 $item->setStatusIcon('fa-dot-circle-o yellow'); 31 31 break; 32 - case DrydockResourceStatus::STATUS_OPEN: 32 + case DrydockResourceStatus::STATUS_ACTIVE: 33 33 $item->setStatusIcon('fa-dot-circle-o green'); 34 34 break; 35 35 case DrydockResourceStatus::STATUS_DESTROYED:
+1 -1
src/applications/drydock/worker/DrydockAllocatorWorker.php
··· 229 229 ->withStatuses( 230 230 array( 231 231 DrydockResourceStatus::STATUS_PENDING, 232 - DrydockResourceStatus::STATUS_OPEN, 232 + DrydockResourceStatus::STATUS_ACTIVE, 233 233 )) 234 234 ->execute(); 235 235
+1 -1
src/applications/drydock/worker/DrydockLeaseWorker.php
··· 34 34 throw new Exception(pht('Resource still activating.')); 35 35 } 36 36 37 - if ($resource_status != DrydockResourceStatus::STATUS_OPEN) { 37 + if ($resource_status != DrydockResourceStatus::STATUS_ACTIVE) { 38 38 throw new PhabricatorWorkerPermanentFailureException( 39 39 pht( 40 40 'Trying to activate lease on a dead resource (in status "%s").',
+1 -1
src/applications/drydock/worker/DrydockResourceDestroyWorker.php
··· 12 12 $status = $resource->getStatus(); 13 13 14 14 switch ($status) { 15 - case DrydockResourceStatus::STATUS_CLOSED: 15 + case DrydockResourceStatus::STATUS_RELEASED: 16 16 case DrydockResourceStatus::STATUS_BROKEN: 17 17 break; 18 18 default:
+3 -3
src/applications/drydock/worker/DrydockResourceUpdateWorker.php
··· 20 20 private function updateResource(DrydockResource $resource) { 21 21 $commands = $this->loadCommands($resource->getPHID()); 22 22 foreach ($commands as $command) { 23 - if ($resource->getStatus() != DrydockResourceStatus::STATUS_OPEN) { 23 + if ($resource->getStatus() != DrydockResourceStatus::STATUS_ACTIVE) { 24 24 // Resources can't receive commands before they activate or after they 25 25 // release. 26 26 break; ··· 46 46 } 47 47 48 48 private function releaseResource(DrydockResource $resource) { 49 - if ($resource->getStatus() != DrydockResourceStatus::STATUS_OPEN) { 49 + if ($resource->getStatus() != DrydockResourceStatus::STATUS_ACTIVE) { 50 50 // If we had multiple release commands 51 51 // This command is only meaningful to resources in the "Open" state. 52 52 return; ··· 57 57 58 58 $resource->openTransaction(); 59 59 $resource 60 - ->setStatus(DrydockResourceStatus::STATUS_CLOSED) 60 + ->setStatus(DrydockResourceStatus::STATUS_RELEASED) 61 61 ->save(); 62 62 63 63 // TODO: Hold slot locks until destruction?