Silence the TransactionProfiler in masterRunningReadOnly()
authorAaron Schulz <aschulz@wikimedia.org>
Sat, 30 Jul 2016 20:42:44 +0000 (13:42 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Sat, 30 Jul 2016 20:42:44 +0000 (13:42 -0700)
Change-Id: I93a5cce8c781c1e2ab4fb6bcefd3720e61f8a4dd

includes/db/loadbalancer/LoadBalancer.php
includes/profiler/TransactionProfiler.php

index 2543958..dbf031e 100644 (file)
@@ -1314,12 +1314,15 @@ class LoadBalancer {
                        $cache->makeGlobalKey( __CLASS__, 'server-read-only', $masterServer ),
                        self::TTL_CACHE_READONLY,
                        function () use ( $wiki, $conn ) {
+                               $this->trxProfiler->setSilenced( true );
                                try {
                                        $dbw = $conn ?: $this->getConnection( DB_MASTER, [], $wiki );
-                                       return (int)$dbw->serverIsReadOnly();
+                                       $readOnly = (int)$dbw->serverIsReadOnly();
                                } catch ( DBError $e ) {
-                                       return 0;
+                                       $readOnly = 0;
                                }
+                               $this->trxProfiler->setSilenced( false );
+                               return $readOnly;
                        },
                        [ 'pcTTL' => $cache::TTL_PROC_LONG, 'busyValue' => 0 ]
                );
index 1aba71c..bf26573 100644 (file)
@@ -38,6 +38,8 @@ class TransactionProfiler implements LoggerAwareInterface {
        protected $dbLockThreshold = 3.0;
        /** @var float Seconds */
        protected $eventThreshold = .25;
+       /** @var bool */
+       protected $silenced = false;
 
        /** @var array transaction ID => (write start time, list of DBs involved) */
        protected $dbTrxHoldingLocks = [];
@@ -77,6 +79,14 @@ class TransactionProfiler implements LoggerAwareInterface {
                $this->logger = $logger;
        }
 
+       /**
+        * @param bool $value
+        * @since 1.28
+        */
+       public function setSilenced( $value ) {
+               $this->silenced = $value;
+       }
+
        /**
         * Set performance expectations
         *
@@ -302,6 +312,10 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string|float|int $actual [optional]
         */
        protected function reportExpectationViolated( $expect, $query, $actual = null ) {
+               if ( $this->silenced ) {
+                       return;
+               }
+
                $n = $this->expect[$expect];
                $by = $this->expectBy[$expect];
                $actual = ( $actual !== null ) ? " (actual: $actual)" : "";