Set cpPosTime cookie for the non-redirect case as well

This is useful if the ChronologyProtector store cannot sync
among datacenters and waitForReplication() is DC-local.
It only applies if the user stays on the domain, however.

Change-Id: I800cade7b87a0f02d6a429e70924c54189a4a7af
This commit is contained in:
Aaron Schulz 2016-09-13 23:52:05 -07:00
parent c954a4efe8
commit a3814f52c4

View file

@ -604,6 +604,14 @@ class MediaWiki {
// OutputPage::output() is fairly slow; run it in $postCommitWork to mask
// the latency of syncing DB positions accross all datacenters synchronously
$flags = $lbFactory::SHUTDOWN_CHRONPROT_SYNC;
if ( $lbFactory->hasOrMadeRecentMasterChanges( INF ) ) {
$cpPosTime = microtime( true );
// Set a cookie in case the DB position store cannot sync accross datacenters.
// This will at least cover the common case of the user staying on the domain.
$expires = time() + ChronologyProtector::POSITION_TTL;
$options = [ 'prefix' => '' ];
$request->response()->setCookie( 'cpPosTime', $cpPosTime, $expires, $options );
}
}
// Record ChronologyProtector positions for DBs affected in this request at this point
$lbFactory->shutdown( $flags, $postCommitWork );