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

Reply via email to