mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-30 02:32:42 +01:00
When we failover to a replica, log the exception we hit
Summary: See PHI1180. Currently, when we failover to a replica, we may not log the failure. Failovers are serious business and bad news, so emit a log even if we are able to connect to the replica. Test Plan: Configured a bogus master and a good replica: ``` $ ./bin/mail list-outbound [2019-03-29 16:26:09] PHLOG: 'Retrying (attempt 1) after connection failure ("AphrontConnectionQueryException", #2002): Attempt to connect to root@127.0.0.2 failed with error #2002: Operation timed out.' at [/Users/epriestley/dev/core/lib/libphutil/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:124] [2019-03-29 16:26:19] PHLOG: 'Retrying (attempt 2) after connection failure ("AphrontConnectionQueryException", #2002): Attempt to connect to root@127.0.0.2 failed with error #2002: Operation timed out.' at [/Users/epriestley/dev/core/lib/libphutil/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:124] [2019-03-29 16:26:29] EXCEPTION: (PhutilProxyException) Failed to connect to master database ("local_config"), failing over into read-only mode. {>} (AphrontConnectionQueryException) Attempt to connect to root@127.0.0.2 failed with error #2002: Operation timed out. at [<phutil>/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:362] <...snip backtrace...> 3945 Voided email rP04f9e72cbd10: Don't subscribe bots implicitly when they act on objects, or when they are… 3946 Voided email rPdf53d72e794c: Allow "Move Tasks to Column..." to prompt for MFA 3947 Voided email rP492b03628f19: Fix a typo in Drydock "Land" operations 3948 Voided email rPb469a5134ddd: Allow "SMTP" and "Sendmail" mailers to have "Message-ID" behavior configured in… 3949 Voided email rPa6fd8f04792d: When performing complex edits, pause sub-editors before they publish to… ... ``` Configured a bogus master and a bogus replica: ``` $ ./bin/mail list-outbound [2019-03-29 16:26:57] PHLOG: 'Retrying (attempt 1) after connection failure ("AphrontConnectionQueryException", #2002): Attempt to connect to root@127.0.0.2 failed with error #2002: Operation timed out.' at [/Users/epriestley/dev/core/lib/libphutil/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:124] [2019-03-29 16:27:07] PHLOG: 'Retrying (attempt 2) after connection failure ("AphrontConnectionQueryException", #2002): Attempt to connect to root@127.0.0.2 failed with error #2002: Operation timed out.' at [/Users/epriestley/dev/core/lib/libphutil/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:124] [2019-03-29 16:27:27] PHLOG: 'Retrying (attempt 1) after connection failure ("AphrontConnectionQueryException", #2002): Attempt to connect to root@127.0.0.3 failed with error #2002: Operation timed out.' at [/Users/epriestley/dev/core/lib/libphutil/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:124] [2019-03-29 16:27:37] PHLOG: 'Retrying (attempt 2) after connection failure ("AphrontConnectionQueryException", #2002): Attempt to connect to root@127.0.0.3 failed with error #2002: Operation timed out.' at [/Users/epriestley/dev/core/lib/libphutil/src/aphront/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php:124] [2019-03-29 16:27:47] EXCEPTION: (PhabricatorClusterStrandedException) Unable to establish a connection to any database host (while trying "local_config"). All masters and replicas are completely unreachable. AphrontConnectionQueryException: Attempt to connect to root@127.0.0.2 failed with error #2002: Operation timed out. at [<phabricator>/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php:177] <...snip backtrace...> ``` Reviewers: amckinley Reviewed By: amckinley Differential Revision: https://secure.phabricator.com/D20351
This commit is contained in:
parent
02f94cd7d2
commit
ea182b6df9
1 changed files with 13 additions and 0 deletions
|
@ -110,6 +110,19 @@ abstract class PhabricatorLiskDAO extends LiskDAO {
|
||||||
$connection = $replica->newApplicationConnection($database);
|
$connection = $replica->newApplicationConnection($database);
|
||||||
$connection->setReadOnly(true);
|
$connection->setReadOnly(true);
|
||||||
if ($replica->isReachable($connection)) {
|
if ($replica->isReachable($connection)) {
|
||||||
|
if ($master_exception) {
|
||||||
|
// If we ended up here as the result of a failover, log the
|
||||||
|
// exception. This is seriously bad news even if we are able
|
||||||
|
// to recover from it.
|
||||||
|
$proxy_exception = new PhutilProxyException(
|
||||||
|
pht(
|
||||||
|
'Failed to connect to master database ("%s"), failing over '.
|
||||||
|
'into read-only mode.',
|
||||||
|
$database),
|
||||||
|
$master_exception);
|
||||||
|
phlog($proxy_exception);
|
||||||
|
}
|
||||||
|
|
||||||
return $connection;
|
return $connection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue