/** @var float[] Map of (DB master name => 1) */
protected $shutdownTouchDBs = [];
- /** @var integer Seconds to store positions */
+ /** @var int Seconds to store positions */
const POSITION_TTL = 60;
- /** @var integer Max time to wait for positions to appear */
+ /** @var int Max time to wait for positions to appear */
const POS_WAIT_TIMEOUT = 5;
/**
public function __construct( BagOStuff $store, array $client, $posTime = null ) {
$this->store = $store;
$this->clientId = md5( $client['ip'] . "\n" . $client['agent'] );
- $this->key = $store->makeGlobalKey( __CLASS__, $this->clientId );
+ $this->key = $store->makeGlobalKey( __CLASS__, $this->clientId, 'v1' );
$this->waitForPosTime = $posTime;
$this->logger = new NullLogger();
}
$this->initPositions();
$masterName = $lb->getServerName( $lb->getWriterIndex() );
- if ( !empty( $this->startupPositions[$masterName] ) ) {
+ if (
+ isset( $this->startupPositions[$masterName] ) &&
+ $this->startupPositions[$masterName] instanceof DBMasterPos
+ ) {
$pos = $this->startupPositions[$masterName];
$this->logger->info( __METHOD__ . ": LB for '$masterName' set to pos $pos\n" );
$lb->waitFor( $pos );
$min = null;
foreach ( $data['positions'] as $pos ) {
- /** @var DBMasterPos $pos */
- $min = $min ? min( $pos->asOfTime(), $min ) : $pos->asOfTime();
+ if ( $pos instanceof DBMasterPos ) {
+ $min = $min ? min( $pos->asOfTime(), $min ) : $pos->asOfTime();
+ }
}
return $min;
* @return array
*/
private static function mergePositions( $curValue, array $shutdownPositions ) {
- /** @var $curPositions DBMasterPos[] */
+ /** @var DBMasterPos[] $curPositions */
if ( $curValue === false ) {
$curPositions = $shutdownPositions;
} else {
$curPositions = $curValue['positions'];
// Use the newest positions for each DB master
foreach ( $shutdownPositions as $db => $pos ) {
- if ( !isset( $curPositions[$db] )
- || $pos->asOfTime() > $curPositions[$db]->asOfTime()
+ if (
+ !isset( $curPositions[$db] ) ||
+ !( $curPositions[$db] instanceof DBMasterPos ) ||
+ $pos->asOfTime() > $curPositions[$db]->asOfTime()
) {
$curPositions[$db] = $pos;
}