dépôts
/
lhc
/
web
/
wiklou.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rdbms: disable ChronologyProtector if EmptyBagOStuff is used
[lhc/web/wiklou.git]
/
includes
/
libs
/
rdbms
/
lbfactory
/
LBFactory.php
diff --git
a/includes/libs/rdbms/lbfactory/LBFactory.php
b/includes/libs/rdbms/lbfactory/LBFactory.php
index
32886e2
..
401e9b3
100644
(file)
--- a/
includes/libs/rdbms/lbfactory/LBFactory.php
+++ b/
includes/libs/rdbms/lbfactory/LBFactory.php
@@
-30,6
+30,7
@@
use EmptyBagOStuff;
use WANObjectCache;
use Exception;
use RuntimeException;
use WANObjectCache;
use Exception;
use RuntimeException;
+use LogicException;
/**
* An interface for generating database load balancers
/**
* An interface for generating database load balancers
@@
-52,6
+53,8
@@
abstract class LBFactory implements ILBFactory {
protected $perfLogger;
/** @var callable Error logger */
protected $errorLogger;
protected $perfLogger;
/** @var callable Error logger */
protected $errorLogger;
+ /** @var callable Deprecation logger */
+ protected $deprecationLogger;
/** @var BagOStuff */
protected $srvCache;
/** @var BagOStuff */
/** @var BagOStuff */
protected $srvCache;
/** @var BagOStuff */
@@
-109,7
+112,12
@@
abstract class LBFactory implements ILBFactory {
$this->errorLogger = isset( $conf['errorLogger'] )
? $conf['errorLogger']
: function ( Exception $e ) {
$this->errorLogger = isset( $conf['errorLogger'] )
? $conf['errorLogger']
: function ( Exception $e ) {
- trigger_error( E_USER_WARNING, get_class( $e ) . ': ' . $e->getMessage() );
+ trigger_error( get_class( $e ) . ': ' . $e->getMessage(), E_USER_WARNING );
+ };
+ $this->deprecationLogger = isset( $conf['deprecationLogger'] )
+ ? $conf['deprecationLogger']
+ : function ( $msg ) {
+ trigger_error( $msg, E_USER_DEPRECATED );
};
$this->profiler = isset( $conf['profiler'] ) ? $conf['profiler'] : null;
};
$this->profiler = isset( $conf['profiler'] ) ? $conf['profiler'] : null;
@@
-124,7
+132,9
@@
abstract class LBFactory implements ILBFactory {
'ChronologyPositionIndex' => isset( $_GET['cpPosIndex'] ) ? $_GET['cpPosIndex'] : null
];
'ChronologyPositionIndex' => isset( $_GET['cpPosIndex'] ) ? $_GET['cpPosIndex'] : null
];
- $this->cliMode = isset( $conf['cliMode'] ) ? $conf['cliMode'] : PHP_SAPI === 'cli';
+ $this->cliMode = isset( $conf['cliMode'] )
+ ? $conf['cliMode']
+ : ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' );
$this->hostname = isset( $conf['hostname'] ) ? $conf['hostname'] : gethostname();
$this->agent = isset( $conf['agent'] ) ? $conf['agent'] : '';
$this->hostname = isset( $conf['hostname'] ) ? $conf['hostname'] : gethostname();
$this->agent = isset( $conf['agent'] ) ? $conf['agent'] : '';
@@
-313,7
+323,7
@@
abstract class LBFactory implements ILBFactory {
$opts += [
'domain' => false,
'cluster' => false,
$opts += [
'domain' => false,
'cluster' => false,
- 'timeout' =>
6
0,
+ 'timeout' =>
$this->cliMode ? 60 : 1
0,
'ifWritesSince' => null
];
'ifWritesSince' => null
];
@@
-456,6
+466,10
@@
abstract class LBFactory implements ILBFactory {
// Request opted out of using position wait logic. This is useful for requests
// done by the job queue or background ETL that do not have a meaningful session.
$this->chronProt->setWaitEnabled( false );
// Request opted out of using position wait logic. This is useful for requests
// done by the job queue or background ETL that do not have a meaningful session.
$this->chronProt->setWaitEnabled( false );
+ } elseif ( $this->memStash instanceof EmptyBagOStuff ) {
+ // No where to store any DB positions and wait for them to appear
+ $this->chronProt->setEnabled( false );
+ $this->replLogger->info( 'Cannot use ChronologyProtector with EmptyBagOStuff.' );
}
$this->replLogger->debug( __METHOD__ . ': using request info ' .
}
$this->replLogger->debug( __METHOD__ . ': using request info ' .
@@
-514,10
+528,15
@@
abstract class LBFactory implements ILBFactory {
'connLogger' => $this->connLogger,
'replLogger' => $this->replLogger,
'errorLogger' => $this->errorLogger,
'connLogger' => $this->connLogger,
'replLogger' => $this->replLogger,
'errorLogger' => $this->errorLogger,
+ 'deprecationLogger' => $this->deprecationLogger,
'hostname' => $this->hostname,
'cliMode' => $this->cliMode,
'agent' => $this->agent,
'hostname' => $this->hostname,
'cliMode' => $this->cliMode,
'agent' => $this->agent,
- 'chronologyProtector' => $this->getChronologyProtector()
+ 'chronologyCallback' => function ( ILoadBalancer $lb ) {
+ // Defer ChronologyProtector construction in case setRequestInfo() ends up
+ // being called later (but before the first connection attempt) (T192611)
+ $this->getChronologyProtector()->initLB( $lb );
+ }
];
}
];
}
@@
-575,6
+594,10
@@
abstract class LBFactory implements ILBFactory {
}
public function setRequestInfo( array $info ) {
}
public function setRequestInfo( array $info ) {
+ if ( $this->chronProt ) {
+ throw new LogicException( 'ChronologyProtector already initialized.' );
+ }
+
$this->requestInfo = $info + $this->requestInfo;
}
$this->requestInfo = $info + $this->requestInfo;
}