From b32325bd23d44afce7989505af5d3844de2cdbd7 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Tue, 1 May 2018 10:57:18 -0700 Subject: [PATCH] rdbms: improve log warnings in runMasterPostTrxCallbacks() Bug: T191282 Change-Id: Iba663c58224af920f90d7b401aab2eb21f921941 --- includes/libs/rdbms/database/Database.php | 10 ++++++---- includes/libs/rdbms/loadbalancer/LoadBalancer.php | 8 ++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) 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) -- 2.20.1