Apply $wgReadOnly to all file backends

* Also added a wfConfiguredReadOnly() method
  to avoid DB_SLAVE connections

Change-Id: I9e7ec95c4b2f763505166d2345d27abaef6257a3
This commit is contained in:
Aaron Schulz 2015-10-01 16:19:05 -07:00 committed by BryanDavis
parent 5f71df9a35
commit 8a3816529a
2 changed files with 46 additions and 17 deletions

View file

@ -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;

View file

@ -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 );
}
/**