mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 19:40:55 +01:00
Distinguish between unreachable cluster database hosts and missing MySQL databases
Summary: Fixes T11577. When we connect to a host and try to select a database which does not exist, we currently treat it as though the host wasn't reachable. This isn't correct, and prevents storage from being initialized while already in cluster mode, since the "config" database won't exist yet the first time we connect. Instead, distinguish between `AphrontSchemaQueryException` (thrown on connection if the requested database is not present) and other errors. Test Plan: - Put Phabricator into cluster database mode (`cluster.databases = ...`). - Swapped `storage.default-namespace` to force initialization of a new install. - Ran `bin/storage upgrade`. - Before patch: Immediate fatal about unreachablility. - After patch: Database initialized. - Also ran initialization steps in tranditional single-host mode (`cluster.databases` empty, `mysql.host` configured). Reviewers: chad Reviewed By: chad Maniphest Tasks: T11577 Differential Revision: https://secure.phabricator.com/D16489
This commit is contained in:
parent
081081b20e
commit
d0013d0898
2 changed files with 7 additions and 1 deletions
|
@ -405,6 +405,12 @@ final class PhabricatorDatabaseRef
|
|||
try {
|
||||
$connection->openConnection();
|
||||
$reachable = true;
|
||||
} catch (AphrontSchemaQueryException $ex) {
|
||||
// We get one of these if the database we're trying to select does not
|
||||
// exist. In this case, just re-throw the exception. This is expected
|
||||
// during first-time setup, when databases like "config" will not exist
|
||||
// yet.
|
||||
throw $ex;
|
||||
} catch (Exception $ex) {
|
||||
$reachable = false;
|
||||
}
|
||||
|
|
2
src/infrastructure/env/PhabricatorEnv.php
vendored
2
src/infrastructure/env/PhabricatorEnv.php
vendored
|
@ -231,7 +231,7 @@ final class PhabricatorEnv extends Phobject {
|
|||
$stack->pushSource(
|
||||
id(new PhabricatorConfigDatabaseSource('default'))
|
||||
->setName(pht('Database')));
|
||||
} catch (AphrontQueryException $exception) {
|
||||
} catch (AphrontSchemaQueryException $exception) {
|
||||
// If the database is not available, just skip this configuration
|
||||
// source. This happens during `bin/storage upgrade`, `bin/conf` before
|
||||
// schema setup, etc.
|
||||
|
|
Loading…
Reference in a new issue