From 83c29da594bdb03442580e35f1d5d71853bc2782 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 19 Jul 2013 11:07:29 -0700 Subject: [PATCH] Mark dead databases as "dead" and don't dump, probe, or list them Summary: When we delete a database, we still need to create it in the patch sequence so that installs can upgrade correctly. However, we shouldn't try to dump, probe, or list it. Mark deleted databases (of which there is only one) as "dead" and don't dump them. A specific problem this fixes is `bin/storage dump` failing when trying to dump `phabricator_timeline`, which no longer exists. Test Plan: Ran `bin/storage dump`, `list`, `probe`. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D6496 --- .../storage/management/PhabricatorStorageManagementAPI.php | 5 ++++- .../storage/management/PhabricatorStoragePatch.php | 6 ++++++ .../PhabricatorStorageManagementDatabasesWorkflow.php | 2 +- .../workflow/PhabricatorStorageManagementDumpWorkflow.php | 2 +- .../workflow/PhabricatorStorageManagementProbeWorkflow.php | 2 +- .../storage/patch/PhabricatorBuiltinPatchList.php | 1 + .../storage/patch/PhabricatorSQLPatchList.php | 2 ++ 7 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php b/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php index a61ebd2c5b..6e78de801f 100644 --- a/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php +++ b/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php @@ -58,13 +58,16 @@ final class PhabricatorStorageManagementAPI { return $this->namespace.'_'.$fragment; } - public function getDatabaseList(array $patches) { + public function getDatabaseList(array $patches, $only_living = false) { assert_instances_of($patches, 'PhabricatorStoragePatch'); $list = array(); foreach ($patches as $patch) { if ($patch->getType() == 'db') { + if ($only_living && $patch->isDead()) { + continue; + } $list[] = $this->getDatabaseName($patch->getName()); } } diff --git a/src/infrastructure/storage/management/PhabricatorStoragePatch.php b/src/infrastructure/storage/management/PhabricatorStoragePatch.php index 014806f872..e945f1bf2c 100644 --- a/src/infrastructure/storage/management/PhabricatorStoragePatch.php +++ b/src/infrastructure/storage/management/PhabricatorStoragePatch.php @@ -8,6 +8,7 @@ final class PhabricatorStoragePatch { private $type; private $after; private $legacy; + private $dead; public function __construct(array $dict) { $this->key = $dict['key']; @@ -16,6 +17,7 @@ final class PhabricatorStoragePatch { $this->legacy = $dict['legacy']; $this->name = $dict['name']; $this->after = $dict['after']; + $this->dead = $dict['dead']; } public function getLegacy() { @@ -42,4 +44,8 @@ final class PhabricatorStoragePatch { return $this->key; } + public function isDead() { + return $this->dead; + } + } diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php index 3c016cd22b..dcbc68f884 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php @@ -14,7 +14,7 @@ final class PhabricatorStorageManagementDatabasesWorkflow $api = $this->getAPI(); $patches = $this->getPatches(); - $databases = $api->getDatabaseList($patches); + $databases = $api->getDatabaseList($patches, $only_living = true); echo implode("\n", $databases)."\n"; return 0; diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php index 046ff51c64..fa47ca2133 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php @@ -25,7 +25,7 @@ final class PhabricatorStorageManagementDumpWorkflow return 1; } - $databases = $api->getDatabaseList($patches); + $databases = $api->getDatabaseList($patches, $only_living = true); list($host, $port) = $this->getBareHostAndPort($api->getHost()); diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php index e9387939d7..d40d1e94ab 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php @@ -18,7 +18,7 @@ final class PhabricatorStorageManagementProbeWorkflow $api = $this->getAPI(); $patches = $this->getPatches(); - $databases = $api->getDatabaseList($patches); + $databases = $api->getDatabaseList($patches, $only_living = true); $conn_r = $api->getConn(null); diff --git a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php index 060c8657e9..b797ba053b 100644 --- a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php +++ b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php @@ -126,6 +126,7 @@ final class PhabricatorBuiltinPatchList extends PhabricatorSQLPatchList { 'db.timeline' => array( 'type' => 'db', 'name' => 'timeline', + 'dead' => true, ), 'db.user' => array( 'type' => 'db', diff --git a/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php b/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php index eddee97b45..65070e67e6 100644 --- a/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php +++ b/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php @@ -40,6 +40,7 @@ abstract class PhabricatorSQLPatchList { 'name' => true, 'after' => true, 'legacy' => true, + 'dead' => true, ); foreach ($patch as $pkey => $pval) { @@ -73,6 +74,7 @@ abstract class PhabricatorSQLPatchList { $patch['key'] = $key; $patch['fullKey'] = $full_key; + $patch['dead'] = (bool)idx($patch, 'dead', false); if (isset($patch['legacy'])) { if ($namespace != 'phabricator') {