Apply $wgReadOnly to all file backends
* Also added a wfConfiguredReadOnly() method to avoid DB_SLAVE connections Change-Id: I9e7ec95c4b2f763505166d2345d27abaef6257a3
This commit is contained in:
parent
5f71df9a35
commit
8a3816529a
2 changed files with 46 additions and 17 deletions
|
|
@ -1342,11 +1342,46 @@ function wfReadOnly() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the value of $wgReadOnly or the contents of $wgReadOnlyFile.
|
||||
* Check if the site is in read-only mode and return the message if so
|
||||
*
|
||||
* This checks wfConfiguredReadOnlyReason() and the main load balancer
|
||||
* for slave lag. This may result in DB_SLAVE connection being made.
|
||||
*
|
||||
* @return string|bool String when in read-only mode; false otherwise
|
||||
*/
|
||||
function wfReadOnlyReason() {
|
||||
$readOnly = wfConfiguredReadOnlyReason();
|
||||
if ( $readOnly !== false ) {
|
||||
return $readOnly;
|
||||
}
|
||||
|
||||
static $autoReadOnly = null;
|
||||
if ( $autoReadOnly === null ) {
|
||||
// Callers use this method to be aware that data presented to a user
|
||||
// may be very stale and thus allowing submissions can be problematic.
|
||||
try {
|
||||
if ( wfGetLB()->getLaggedSlaveMode() ) {
|
||||
$autoReadOnly = 'The database has been automatically locked ' .
|
||||
'while the slave database servers catch up to the master';
|
||||
} else {
|
||||
$autoReadOnly = false;
|
||||
}
|
||||
} catch ( DBConnectionError $e ) {
|
||||
$autoReadOnly = 'The database has been automatically locked ' .
|
||||
'until the slave database servers become available';
|
||||
}
|
||||
}
|
||||
|
||||
return $autoReadOnly;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of $wgReadOnly or the contents of $wgReadOnlyFile.
|
||||
*
|
||||
* @return string|bool String when in read-only mode; false otherwise
|
||||
* @since 1.27
|
||||
*/
|
||||
function wfConfiguredReadOnlyReason() {
|
||||
global $wgReadOnly, $wgReadOnlyFile;
|
||||
|
||||
if ( $wgReadOnly === null ) {
|
||||
|
|
@ -1356,17 +1391,6 @@ function wfReadOnlyReason() {
|
|||
} else {
|
||||
$wgReadOnly = false;
|
||||
}
|
||||
// Callers use this method to be aware that data presented to a user
|
||||
// may be very stale and thus allowing submissions can be problematic.
|
||||
try {
|
||||
if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) {
|
||||
$wgReadOnly = 'The database has been automatically locked ' .
|
||||
'while the slave database servers catch up to the master';
|
||||
}
|
||||
} catch ( DBConnectionError $e ) {
|
||||
$wgReadOnly = 'The database has been automatically locked ' .
|
||||
'until the slave database servers become available';
|
||||
}
|
||||
}
|
||||
|
||||
return $wgReadOnly;
|
||||
|
|
|
|||
|
|
@ -63,9 +63,6 @@ class FileBackendGroup {
|
|||
protected function initFromGlobals() {
|
||||
global $wgLocalFileRepo, $wgForeignFileRepos, $wgFileBackends;
|
||||
|
||||
// Register explicitly defined backends
|
||||
$this->register( $wgFileBackends );
|
||||
|
||||
$autoBackends = array();
|
||||
// Automatically create b/c backends for file repos...
|
||||
$repos = array_merge( $wgForeignFileRepos, array( $wgLocalFileRepo ) );
|
||||
|
|
@ -105,8 +102,16 @@ class FileBackendGroup {
|
|||
);
|
||||
}
|
||||
|
||||
// Register implicitly defined backends
|
||||
$this->register( $autoBackends );
|
||||
$backends = array_merge( $autoBackends, $wgFileBackends );
|
||||
|
||||
// Apply $wgReadOnly to all backends if not already read-only
|
||||
foreach ( $backends as &$backend ) {
|
||||
$backend['readOnly'] = !empty( $backend['readOnly'] )
|
||||
? $backend['readOnly']
|
||||
: wfConfiguredReadOnlyReason();
|
||||
}
|
||||
|
||||
$this->register( $backends );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue