From: Adrian Lang Date: Tue, 27 Oct 2015 13:47:38 +0000 (+0000) Subject: Revert "Enforce stricter slave lag limits for bot API requests" X-Git-Tag: 1.31.0-rc.0~9209^2 X-Git-Url: https://git.cyclocoop.org/%27.%24link.%27?a=commitdiff_plain;h=25aeee58af52fc84d2780df910083a735c6fbaa6;p=lhc%2Fweb%2Fwiklou.git Revert "Enforce stricter slave lag limits for bot API requests" This broke most Wikidata API PHPUnit tests. This reverts commit dc10216e77b06b0fc7bb5e0824eb0967129c2e1f. Change-Id: I19285ff0eddffb38cdbf45bbd05ba2d8a1816b41 --- diff --git a/RELEASE-NOTES-1.27 b/RELEASE-NOTES-1.27 index f3f0704d25..f8293b975b 100644 --- a/RELEASE-NOTES-1.27 +++ b/RELEASE-NOTES-1.27 @@ -63,8 +63,6 @@ production. setting in the relevant section of $wgLBFactoryConf. * User::newSystemUser() may be used to simplify the creation of passwordless "system" users for logged actions from scripts and extensions. -* $wgAPIMaxLagThreshold was added to limit bot changes when databases lag - becomes too high. ==== External libraries ==== diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 310b241bc1..04f3f31789 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -7323,13 +7323,6 @@ $wgAPIMaxResultSize = 8388608; */ $wgAPIMaxUncachedDiffs = 1; -/** - * Maximum amount of DB lag on a majority of DB slaves to tolerate - * before forcing bots to retry any write requests via API errors. - * This should be lower than the 'max lag' value in $wgLBFactoryConf. - */ -$wgAPIMaxLagThreshold = 7; - /** * Log file or URL (TCP or UDP) to log API requests to, or false to disable * API request logging diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php index f60f5df6e9..c641c9513c 100644 --- a/includes/api/ApiMain.php +++ b/includes/api/ApiMain.php @@ -1002,6 +1002,7 @@ class ApiMain extends ApiBase { */ protected function checkMaxLag( $module, $params ) { if ( $module->shouldCheckMaxlag() && isset( $params['maxlag'] ) ) { + // Check for maxlag $maxLag = $params['maxlag']; list( $host, $lag ) = wfGetLB()->getMaxLag(); if ( $lag > $maxLag ) { @@ -1147,7 +1148,6 @@ class ApiMain extends ApiBase { ) { $this->dieUsageMsg( 'readrequired' ); } - if ( $module->isWriteMode() ) { if ( !$this->mEnableWrite ) { $this->dieUsageMsg( 'writedisabled' ); @@ -1155,7 +1155,9 @@ class ApiMain extends ApiBase { if ( !$user->isAllowed( 'writeapi' ) ) { $this->dieUsageMsg( 'writerequired' ); } - $this->checkReadOnly( $module ); + if ( wfReadOnly() ) { + $this->dieReadOnly(); + } } // Allow extensions to stop execution for arbitrary reasons. @@ -1165,39 +1167,6 @@ class ApiMain extends ApiBase { } } - /** - * Check if the DB is read-only for this user - * @param ApiBase $module An Api module - */ - protected function checkReadOnly( $module ) { - if ( wfReadOnly() ) { - $this->dieReadOnly(); - } - - if ( $module->isWriteMode() && $this->getUser()->isAllowed( 'bot' ) ) { - // Figure out how many servers have passed the lag threshold - $numLagged = 0; - $lagLimit = $this->getConfig()->get( 'APIMaxLagThreshold' ); - foreach ( wfGetLB()->getLagTimes() as $lag ) { - if ( $lag > $lagLimit ) { - ++$numLagged; - } - } - // If a majority of slaves are too lagged then disallow writes - $slaveCount = wfGetLB()->getServerCount() - 1; - if ( $numLagged >= ceil( $slaveCount / 2 ) ) { - $parsed = $this->parseMsg( array( 'readonlytext' ) ); - $this->dieUsage( - $parsed['info'], - $parsed['code'], - /* http error */ - 0, - array( 'readonlyreason' => "Waiting for $numLagged lagged database(s)" ) - ); - } - } - } - /** * Check asserts of the user's rights * @param array $params diff --git a/includes/db/loadbalancer/LoadBalancer.php b/includes/db/loadbalancer/LoadBalancer.php index a5a5c37d2b..bc9465ba60 100644 --- a/includes/db/loadbalancer/LoadBalancer.php +++ b/includes/db/loadbalancer/LoadBalancer.php @@ -68,9 +68,7 @@ class LoadBalancer { /** @var integer Warn when this many connection are held */ const CONN_HELD_WARN_THRESHOLD = 10; /** @var integer Default 'max lag' when unspecified */ - const MAX_LAG = 10; - /** @var integer Max time to wait for a slave to catch up (e.g. ChronologyProtector) */ - const POS_WAIT_TIMEOUT = 10; + const MAX_LAG = 30; /** * @param array $params Array with keys: @@ -84,7 +82,7 @@ class LoadBalancer { throw new MWException( __CLASS__ . ': missing servers parameter' ); } $this->mServers = $params['servers']; - $this->mWaitTimeout = self::POS_WAIT_TIMEOUT; + $this->mWaitTimeout = 10; $this->mReadIndex = -1; $this->mWriteIndex = -1;