From: Aaron Schulz Date: Tue, 22 Dec 2015 11:05:45 +0000 (-0800) Subject: Let LBFactory/LoadBalancer transaction methods take __METHOD__ X-Git-Tag: 1.31.0-rc.0~8578^2 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=d75aec5975b715ac28384a240392ffa5dde3edb2 Let LBFactory/LoadBalancer transaction methods take __METHOD__ Also send commitAll() times to statsd like commitMasterChanges(). Change-Id: I261ca89f00e40b35f2ddeef6845b111720e7e43c --- diff --git a/includes/db/loadbalancer/LBFactory.php b/includes/db/loadbalancer/LBFactory.php index eeeca6283c..4aed7180ee 100644 --- a/includes/db/loadbalancer/LBFactory.php +++ b/includes/db/loadbalancer/LBFactory.php @@ -190,36 +190,47 @@ abstract class LBFactory { * @param array $args */ private function forEachLBCallMethod( $methodName, array $args = array() ) { - $this->forEachLB( function ( LoadBalancer $loadBalancer, $methodName, array $args ) { - call_user_func_array( array( $loadBalancer, $methodName ), $args ); - }, array( $methodName, $args ) ); + $this->forEachLB( + function ( LoadBalancer $loadBalancer, $methodName, array $args ) { + call_user_func_array( array( $loadBalancer, $methodName ), $args ); + }, + array( $methodName, $args ) + ); } /** * Commit on all connections. Done for two reasons: * 1. To commit changes to the masters. * 2. To release the snapshot on all connections, master and slave. + * @param string $fname Caller name */ - public function commitAll() { - $this->forEachLBCallMethod( 'commitAll' ); + public function commitAll( $fname = __METHOD__ ) { + $start = microtime( true ); + $this->forEachLBCallMethod( 'commitAll', array( $fname ) ); + $timeMs = 1000 * ( microtime( true ) - $start ); + + RequestContext::getMain()->getStats()->timing( "db.commit-all", $timeMs ); } /** * Commit changes on all master connections + * @param string $fname Caller name */ - public function commitMasterChanges() { + public function commitMasterChanges( $fname = __METHOD__ ) { $start = microtime( true ); - $this->forEachLBCallMethod( 'commitMasterChanges' ); + $this->forEachLBCallMethod( 'commitMasterChanges', array( $fname ) ); $timeMs = 1000 * ( microtime( true ) - $start ); + RequestContext::getMain()->getStats()->timing( "db.commit-masters", $timeMs ); } /** * Rollback changes on all master connections + * @param string $fname Caller name * @since 1.23 */ - public function rollbackMasterChanges() { - $this->forEachLBCallMethod( 'rollbackMasterChanges' ); + public function rollbackMasterChanges( $fname = __METHOD__ ) { + $this->forEachLBCallMethod( 'rollbackMasterChanges', array( $fname ) ); } /** diff --git a/includes/db/loadbalancer/LoadBalancer.php b/includes/db/loadbalancer/LoadBalancer.php index 19b2d1cdd4..4ff400c137 100644 --- a/includes/db/loadbalancer/LoadBalancer.php +++ b/includes/db/loadbalancer/LoadBalancer.php @@ -1021,14 +1021,15 @@ class LoadBalancer { /** * Commit transactions on all open connections + * @param string $fname Caller name */ - public function commitAll() { + public function commitAll( $fname = __METHOD__ ) { foreach ( $this->mConns as $conns2 ) { foreach ( $conns2 as $conns3 ) { /** @var DatabaseBase[] $conns3 */ foreach ( $conns3 as $conn ) { if ( $conn->trxLevel() ) { - $conn->commit( __METHOD__, 'flush' ); + $conn->commit( $fname, 'flush' ); } } } @@ -1036,9 +1037,10 @@ class LoadBalancer { } /** - * Issue COMMIT only on master, only if queries were done on connection + * Issue COMMIT only on master, only if queries were done on connection + * @param string $fname Caller name */ - public function commitMasterChanges() { + public function commitMasterChanges( $fname = __METHOD__ ) { $masterIndex = $this->getWriterIndex(); foreach ( $this->mConns as $conns2 ) { if ( empty( $conns2[$masterIndex] ) ) { @@ -1047,7 +1049,7 @@ class LoadBalancer { /** @var DatabaseBase $conn */ foreach ( $conns2[$masterIndex] as $conn ) { if ( $conn->trxLevel() && $conn->writesOrCallbacksPending() ) { - $conn->commit( __METHOD__, 'flush' ); + $conn->commit( $fname, 'flush' ); } } } @@ -1055,9 +1057,11 @@ class LoadBalancer { /** * Issue ROLLBACK only on master, only if queries were done on connection + * @param string $fname Caller name + * @throws DBExpectedError * @since 1.23 */ - public function rollbackMasterChanges() { + public function rollbackMasterChanges( $fname = __METHOD__ ) { $failedServers = array(); $masterIndex = $this->getWriterIndex(); @@ -1069,7 +1073,7 @@ class LoadBalancer { foreach ( $conns2[$masterIndex] as $conn ) { if ( $conn->trxLevel() && $conn->writesOrCallbacksPending() ) { try { - $conn->rollback( __METHOD__, 'flush' ); + $conn->rollback( $fname, 'flush' ); } catch ( DBError $e ) { MWExceptionHandler::logException( $e ); $failedServers[] = $conn->getServer();