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
$wgDBerrorLogTZ = $wgLocaltimezone;
}
$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' ),
$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
] );
// Useful debug output
* - IPAddress : IP address
* - UserAgent : User-Agent HTTP header
* - ChronologyProtection : cookie/header value specifying ChronologyProtector usage
* - 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 );
}
*/
public function setRequestInfo( array $info );
}
$this->requestInfo = [
'IPAddress' => isset( $_SERVER[ 'REMOTE_ADDR' ] ) ? $_SERVER[ 'REMOTE_ADDR' ] : '',
'UserAgent' => isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '',
$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';
];
$this->cliMode = isset( $conf['cliMode'] ) ? $conf['cliMode'] : PHP_SAPI === 'cli';
'ip' => $this->requestInfo['IPAddress'],
'agent' => $this->requestInfo['UserAgent'],
],
'ip' => $this->requestInfo['IPAddress'],
'agent' => $this->requestInfo['UserAgent'],
],
- isset( $_GET['cpPosTime'] ) ? $_GET['cpPosTime'] : null
+ $this->requestInfo['ChronologyPositionTime']
);
$this->chronProt->setLogger( $this->replLogger );
);
$this->chronProt->setLogger( $this->replLogger );