Add TransactionProfiler::redefineExpectations and migrate appropriate callers
authorAaron Schulz <aschulz@wikimedia.org>
Tue, 4 Dec 2018 21:03:59 +0000 (16:03 -0500)
committerAaron Schulz <aschulz@wikimedia.org>
Mon, 10 Dec 2018 16:02:30 +0000 (16:02 +0000)
Some of the callers of setExpectations() actually need to reset the old
expectations to avoid erroneous warnings.

Change-Id: I63c01c0f6cd748bdc849f1a5264e17bd377b9d11

includes/MediaWiki.php
includes/actions/RollbackAction.php
includes/api/ApiRollback.php
includes/libs/rdbms/TransactionProfiler.php

index 267b589..f5a954d 100644 (file)
@@ -893,8 +893,7 @@ class MediaWiki {
 
                // Loosen DB query expectations since the HTTP client is unblocked
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
-               $trxProfiler->resetExpectations();
-               $trxProfiler->setExpectations(
+               $trxProfiler->redefineExpectations(
                        $this->context->getRequest()->hasSafeMethod()
                                ? $this->config->get( 'TrxProfilerLimits' )['PostSend-GET']
                                : $this->config->get( 'TrxProfilerLimits' )['PostSend-POST'],
index 3e6d402..03a5bc8 100644 (file)
@@ -73,9 +73,9 @@ class RollbackAction extends FormlessAction {
                $fname = __METHOD__;
                $trxLimits = $this->context->getConfig()->get( 'TrxProfilerLimits' );
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
-               $trxProfiler->setExpectations( $trxLimits['POST'], $fname );
+               $trxProfiler->redefineExpectations( $trxLimits['POST'], $fname );
                DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits, $fname ) {
-                       $trxProfiler->setExpectations( $trxLimits['PostSend-POST'], $fname );
+                       $trxProfiler->redefineExpectations( $trxLimits['PostSend-POST'], $fname );
                } );
 
                $data = null;
index 78696da..18aa6da 100644 (file)
@@ -59,9 +59,9 @@ class ApiRollback extends ApiBase {
                $fname = __METHOD__;
                $trxLimits = $this->getConfig()->get( 'TrxProfilerLimits' );
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
-               $trxProfiler->setExpectations( $trxLimits['POST'], $fname );
+               $trxProfiler->redefineExpectations( $trxLimits['POST'], $fname );
                DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits, $fname ) {
-                       $trxProfiler->setExpectations( $trxLimits['PostSend-POST'], $fname );
+                       $trxProfiler->redefineExpectations( $trxLimits['PostSend-POST'], $fname );
                } );
 
                $retval = $pageObj->doRollback(
index 8ea28f0..e4dad01 100644 (file)
@@ -114,10 +114,12 @@ class TransactionProfiler implements LoggerAwareInterface {
        }
 
        /**
-        * Set multiple performance expectations
+        * Set one or multiple performance expectations
         *
         * With conflicting expectations, the most narrow ones will be used
         *
+        * Use this to initialize expectations or make them stricter mid-request
+        *
         * @param array $expects Map of (event => limit)
         * @param string $fname
         * @since 1.26
@@ -129,7 +131,11 @@ class TransactionProfiler implements LoggerAwareInterface {
        }
 
        /**
-        * Reset performance expectations and hit counters
+        * Reset all performance expectations and hit counters
+        *
+        * Use this for unit testing or before applying a totally different set of expectations
+        * for a different part of the request, such as during "post-send" (execution after HTTP
+        * response completion)
         *
         * @since 1.25
         */
@@ -145,6 +151,21 @@ class TransactionProfiler implements LoggerAwareInterface {
                $this->expectBy = [];
        }
 
+       /**
+        * Clear all expectations and hit counters and set new performance expectations
+        *
+        * Use this to apply a totally different set of expectations for a different part
+        * of the request, such as during "post-send" (execution after HTTP response completion)
+        *
+        * @param array $expects Map of (event => limit)
+        * @param string $fname
+        * @since 1.33
+        */
+       public function redefineExpectations( array $expects, $fname ) {
+               $this->resetExpectations();
+               $this->setExpectations( $expects, $fname );
+       }
+
        /**
         * Mark a DB as having been connected to with a new handle
         *