jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/393983 )
Change subject: Make ChronologyProtector actually use cpPosTime cookies ...................................................................... Make ChronologyProtector actually use cpPosTime cookies Setup.php was only injected the value from $_GET. LBFactory used to check both before 0e5cd18b74d83c50, with the cookie check left in LBFactoryMW. After d175b391ae2a7, LBFactoryMW class switched to the default LBFactory method for making a ChronologyProtector instance, so the cookie check was lost there too. This means that an HTTP GET request due to a redirect from a POST request will still make sure the DB position store is up-to-date. This only matters is that store uses replication (e.g. cross DC). Also refactor LBFactory handling of the cpPosTime URL parameter. Change-Id: Ie5744577609f4c193cacd71334f92b30f02e3846 --- M includes/Setup.php M includes/libs/rdbms/lbfactory/ILBFactory.php M includes/libs/rdbms/lbfactory/LBFactory.php 3 files changed, 11 insertions(+), 4 deletions(-) Approvals: Krinkle: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/Setup.php b/includes/Setup.php index 4c281b1..081ea68 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -734,13 +734,18 @@ $wgDBerrorLogTZ = $wgLocaltimezone; } -// initialize the request object in $wgRequest +// Initialize the request object in $wgRequest $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat // Set user IP/agent information for causal consistency purposes MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [ 'IPAddress' => $wgRequest->getIP(), 'UserAgent' => $wgRequest->getHeader( 'User-Agent' ), - 'ChronologyProtection' => $wgRequest->getHeader( 'ChronologyProtection' ) + 'ChronologyProtection' => $wgRequest->getHeader( 'ChronologyProtection' ), + // The cpPosTime cookie has no prefix and is set by MediaWiki::preOutputCommit() + 'ChronologyPositionTime' => $wgRequest->getFloat( + 'cpPosTime', + $wgRequest->getCookie( 'cpPosTime', '' ) + ) ] ); // Useful debug output diff --git a/includes/libs/rdbms/lbfactory/ILBFactory.php b/includes/libs/rdbms/lbfactory/ILBFactory.php index f6d080e..697af0e 100644 --- a/includes/libs/rdbms/lbfactory/ILBFactory.php +++ b/includes/libs/rdbms/lbfactory/ILBFactory.php @@ -319,6 +319,7 @@ * - IPAddress : IP address * - UserAgent : User-Agent HTTP header * - ChronologyProtection : cookie/header value specifying ChronologyProtector usage + * - ChronologyPositionTime: timestamp used to get up-to-date DB positions for the agent */ public function setRequestInfo( array $info ); } diff --git a/includes/libs/rdbms/lbfactory/LBFactory.php b/includes/libs/rdbms/lbfactory/LBFactory.php index c891fb6..ef716b6 100644 --- a/includes/libs/rdbms/lbfactory/LBFactory.php +++ b/includes/libs/rdbms/lbfactory/LBFactory.php @@ -115,7 +115,8 @@ $this->requestInfo = [ 'IPAddress' => isset( $_SERVER[ 'REMOTE_ADDR' ] ) ? $_SERVER[ 'REMOTE_ADDR' ] : '', 'UserAgent' => isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '', - 'ChronologyProtection' => 'true' + 'ChronologyProtection' => 'true', + 'ChronologyPositionTime' => isset( $_GET['cpPosTime'] ) ? $_GET['cpPosTime'] : null ]; $this->cliMode = isset( $conf['cliMode'] ) ? $conf['cliMode'] : PHP_SAPI === 'cli'; @@ -440,7 +441,7 @@ 'ip' => $this->requestInfo['IPAddress'], 'agent' => $this->requestInfo['UserAgent'], ], - isset( $_GET['cpPosTime'] ) ? $_GET['cpPosTime'] : null + $this->requestInfo['ChronologyPositionTime'] ); $this->chronProt->setLogger( $this->replLogger ); -- To view, visit https://gerrit.wikimedia.org/r/393983 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ie5744577609f4c193cacd71334f92b30f02e3846 Gerrit-PatchSet: 9 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org> Gerrit-Reviewer: Aaron Schulz <asch...@wikimedia.org> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits