From: Aaron Schulz Date: Tue, 1 May 2018 17:57:18 +0000 (-0700) Subject: rdbms: improve log warnings in runMasterPostTrxCallbacks() X-Git-Tag: 1.34.0-rc.0~5561^2 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=b32325bd23d44afce7989505af5d3844de2cdbd7;p=lhc%2Fweb%2Fwiklou.git rdbms: improve log warnings in runMasterPostTrxCallbacks() Bug: T191282 Change-Id: Iba663c58224af920f90d7b401aab2eb21f921941 --- diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index f44b7cb0cc..8da1ca96b2 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -722,12 +722,14 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware } /** - * Get the list of method names that have pending write queries or that - * have transaction callbacks that have yet to run + * List the methods that have write queries or callbacks for the current transaction * - * @return array + * This method should not be used outside of Database/LoadBalancer + * + * @return string[] + * @since 1.32 */ - protected function pendingWriteAndCallbackCallers() { + public function pendingWriteAndCallbackCallers() { $fnames = $this->pendingWriteCallers(); foreach ( [ $this->trxIdleCallbacks, diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php index e70d49e979..ddc4277f1f 100644 --- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php @@ -1424,6 +1424,14 @@ class LoadBalancer implements ILoadBalancer { if ( $conn->writesPending() ) { // A callback from another handle wrote to this one and DBO_TRX is set $this->queryLogger->warning( __METHOD__ . ": found writes pending." ); + $fnames = implode( ', ', $conn->pendingWriteAndCallbackCallers() ); + $this->queryLogger->warning( + __METHOD__ . ": found writes pending ($fnames).", + [ + 'db_server' => $conn->getServer(), + 'db_name' => $conn->getDBname() + ] + ); } elseif ( $conn->trxLevel() ) { // A callback from another handle read from this one and DBO_TRX is set, // which can easily happen if there is only one DB (no replicas)