Merge "filebackend: cleaned up the FileBackend constructor"
This commit is contained in:
commit
76dc198651
16 changed files with 48 additions and 32 deletions
|
|
@ -114,13 +114,13 @@ abstract class FileBackend {
|
|||
* This name should not be changed after use (e.g. with journaling).
|
||||
* Note that the name is *not* used in actual container names.
|
||||
* - wikiId : Prefix to container names that is unique to this backend.
|
||||
* If not provided, this defaults to the current wiki ID.
|
||||
* It should only consist of alphanumberic, '-', and '_' characters.
|
||||
* This ID is what avoids collisions if multiple logical backends
|
||||
* use the same storage system, so this should be set carefully.
|
||||
* - lockManager : Registered name of a file lock manager to use.
|
||||
* - fileJournal : File journal configuration; see FileJournal::factory().
|
||||
* Journals simply log changes to files stored in the backend.
|
||||
* - lockManager : LockManager object to use for any file locking.
|
||||
* If not provided, then no file locking will be enforced.
|
||||
* - fileJournal : FileJournal object to use for logging changes to files.
|
||||
* If not provided, then change journaling will be disabled.
|
||||
* - readOnly : Write operations are disallowed if this is a non-empty string.
|
||||
* It should be an explanation for the backend being read-only.
|
||||
* - parallelize : When to do file operations in parallel (when possible).
|
||||
|
|
@ -133,16 +133,21 @@ abstract class FileBackend {
|
|||
if ( !preg_match( '!^[a-zA-Z0-9-_]{1,255}$!', $this->name ) ) {
|
||||
throw new FileBackendException( "Backend name `{$this->name}` is invalid." );
|
||||
}
|
||||
$this->wikiId = isset( $config['wikiId'] )
|
||||
? $config['wikiId']
|
||||
: wfWikiID(); // e.g. "my_wiki-en_"
|
||||
$this->lockManager = ( $config['lockManager'] instanceof LockManager )
|
||||
if ( !isset( $config['wikiId'] ) ) {
|
||||
$config['wikiId'] = wfWikiID();
|
||||
wfDeprecated( __METHOD__ . ' called without "wikiID".', '1.23' );
|
||||
}
|
||||
if ( isset( $config['lockManager'] ) && !is_object( $config['lockManager'] ) ) {
|
||||
$config['lockManager'] =
|
||||
LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
|
||||
wfDeprecated( __METHOD__ . ' called with non-object "lockManager".', '1.23' );
|
||||
}
|
||||
$this->wikiId = $config['wikiId']; // e.g. "my_wiki-en_"
|
||||
$this->lockManager = isset( $config['lockManager'] )
|
||||
? $config['lockManager']
|
||||
: LockManagerGroup::singleton( $this->wikiId )->get( $config['lockManager'] );
|
||||
: new NullLockManager( array() );
|
||||
$this->fileJournal = isset( $config['fileJournal'] )
|
||||
? ( ( $config['fileJournal'] instanceof FileJournal )
|
||||
? $config['fileJournal']
|
||||
: FileJournal::factory( $config['fileJournal'], $this->name ) )
|
||||
? $config['fileJournal']
|
||||
: FileJournal::factory( array( 'class' => 'NullFileJournal' ), $this->name );
|
||||
$this->readOnly = isset( $config['readOnly'] )
|
||||
? (string)$config['readOnly']
|
||||
|
|
|
|||
|
|
@ -152,6 +152,14 @@ class FileBackendGroup {
|
|||
if ( !isset( $this->backends[$name]['instance'] ) ) {
|
||||
$class = $this->backends[$name]['class'];
|
||||
$config = $this->backends[$name]['config'];
|
||||
$config['wikiId'] = isset( $config['wikiId'] )
|
||||
? $config['wikiId']
|
||||
: wfWikiID(); // e.g. "my_wiki-en_"
|
||||
$config['lockManager'] =
|
||||
LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
|
||||
$config['fileJournal'] = isset( $config['fileJournal'] )
|
||||
? FileJournal::factory( $config['fileJournal'], $name )
|
||||
: FileJournal::factory( array( 'class' => 'NullFileJournal' ), $name );
|
||||
$this->backends[$name]['instance'] = new $class( $config );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ class FileBackendMultiWrite extends FileBackend {
|
|||
// Alter certain sub-backend settings for sanity
|
||||
unset( $config['readOnly'] ); // use proxy backend setting
|
||||
unset( $config['fileJournal'] ); // use proxy backend journal
|
||||
unset( $config['lockManager'] ); // lock under proxy backend
|
||||
$config['wikiId'] = $this->wikiId; // use the proxy backend wiki ID
|
||||
$config['lockManager'] = 'nullLockManager'; // lock under proxy backend
|
||||
if ( !empty( $config['isMultiMaster'] ) ) {
|
||||
if ( $this->masterIndex >= 0 ) {
|
||||
throw new FileBackendError( 'More than one master backend defined.' );
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ class ParserTest {
|
|||
'transformVia404' => false,
|
||||
'backend' => new FSFileBackend( array(
|
||||
'name' => 'local-backend',
|
||||
'lockManager' => 'fsLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array(
|
||||
'local-public' => wfTempDir() . '/test-repo/public',
|
||||
'local-thumb' => wfTempDir() . '/test-repo/thumb',
|
||||
|
|
@ -738,7 +738,7 @@ class ParserTest {
|
|||
'transformVia404' => false,
|
||||
'backend' => new FSFileBackend( array(
|
||||
'name' => 'local-backend',
|
||||
'lockManager' => 'fsLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array(
|
||||
'local-public' => $this->uploadDir,
|
||||
'local-thumb' => $this->uploadDir . '/thumb',
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class LocalFileTest extends MediaWikiTestCase {
|
|||
'transformVia404' => false,
|
||||
'backend' => new FSFileBackend( array(
|
||||
'name' => 'local-backend',
|
||||
'lockManager' => 'fsLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array(
|
||||
'cont1' => "/testdir/local-backend/tempimages/cont1",
|
||||
'cont2' => "/testdir/local-backend/tempimages/cont2"
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ class FileBackendTest extends MediaWikiTestCase {
|
|||
$useConfig['shardViaHashLevels'] = array( // test sharding
|
||||
'unittest-cont1' => array( 'levels' => 1, 'base' => 16, 'repeat' => 1 )
|
||||
);
|
||||
$useConfig['fileJournal'] = FileJournal::factory( $config['fileJournal'], $name );
|
||||
$useConfig['lockManager'] = LockManagerGroup::singleton()->get( $useConfig['lockManager'] );
|
||||
$class = $useConfig['class'];
|
||||
self::$backendToUse = new $class( $useConfig );
|
||||
$this->singleBackend = self::$backendToUse;
|
||||
|
|
@ -44,9 +46,8 @@ class FileBackendTest extends MediaWikiTestCase {
|
|||
} else {
|
||||
$this->singleBackend = new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'fsLockManager',
|
||||
#'parallelize' => 'implicit',
|
||||
'wikiId' => wfWikiID() . $uniqueId,
|
||||
'lockManager' => LockManagerGroup::singleton()->get( 'fsLockManager' ),
|
||||
'wikiId' => wfWikiID(),
|
||||
'containerPaths' => array(
|
||||
'unittest-cont1' => "{$tmpPrefix}-localtesting-cont1",
|
||||
'unittest-cont2' => "{$tmpPrefix}-localtesting-cont2" )
|
||||
|
|
@ -54,14 +55,13 @@ class FileBackendTest extends MediaWikiTestCase {
|
|||
}
|
||||
$this->multiBackend = new FileBackendMultiWrite( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'fsLockManager',
|
||||
'lockManager' => LockManagerGroup::singleton()->get( 'fsLockManager' ),
|
||||
'parallelize' => 'implicit',
|
||||
'wikiId' => wfWikiId() . $uniqueId,
|
||||
'backends' => array(
|
||||
array(
|
||||
'name' => 'localmultitesting1',
|
||||
'class' => 'FSFileBackend',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'containerPaths' => array(
|
||||
'unittest-cont1' => "{$tmpPrefix}-localtestingmulti1-cont1",
|
||||
'unittest-cont2' => "{$tmpPrefix}-localtestingmulti1-cont2" ),
|
||||
|
|
@ -70,7 +70,6 @@ class FileBackendTest extends MediaWikiTestCase {
|
|||
array(
|
||||
'name' => 'localmultitesting2',
|
||||
'class' => 'FSFileBackend',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'containerPaths' => array(
|
||||
'unittest-cont1' => "{$tmpPrefix}-localtestingmulti2-cont1",
|
||||
'unittest-cont2' => "{$tmpPrefix}-localtestingmulti2-cont2" ),
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class FileRepoTest extends MediaWikiTestCase {
|
|||
'name' => 'FileRepoTestRepository',
|
||||
'backend' => new FSFileBackend( array(
|
||||
'name' => 'local-testing',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => 'test_wiki',
|
||||
'containerPaths' => array()
|
||||
) )
|
||||
) );
|
||||
|
|
|
|||
|
|
@ -25,13 +25,15 @@ class StoreBatchTest extends MediaWikiTestCase {
|
|||
$useConfig = $conf;
|
||||
}
|
||||
}
|
||||
$useConfig['lockManager'] = LockManagerGroup::singleton()->get( $useConfig['lockManager'] );
|
||||
unset( $useConfig['fileJournal'] );
|
||||
$useConfig['name'] = 'local-testing'; // swap name
|
||||
$class = $useConfig['class'];
|
||||
$backend = new $class( $useConfig );
|
||||
} else {
|
||||
$backend = new FSFileBackend( array(
|
||||
'name' => 'local-testing',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiID(),
|
||||
'containerPaths' => array(
|
||||
'unittests-public' => "{$tmpPrefix}-public",
|
||||
'unittests-thumb' => "{$tmpPrefix}-thumb",
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class ExifRotationTest extends MediaWikiTestCase {
|
|||
'url' => 'http://localhost/thumbtest',
|
||||
'backend' => new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array( 'temp-thumb' => $tmpDir, 'data' => $filePath )
|
||||
) )
|
||||
) );
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class FormatMetadataTest extends MediaWikiTestCase {
|
|||
$filePath = __DIR__ . '/../../data/media';
|
||||
$this->backend = new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array( 'data' => $filePath )
|
||||
) );
|
||||
$this->repo = new FSRepo( array(
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class GIFHandlerTest extends MediaWikiTestCase {
|
|||
$this->filePath = __DIR__ . '/../../data/media';
|
||||
$this->backend = new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array( 'data' => $this->filePath )
|
||||
) );
|
||||
$this->repo = new FSRepo( array(
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class JpegTest extends MediaWikiTestCase {
|
|||
|
||||
$this->backend = new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array( 'data' => $this->filePath )
|
||||
) );
|
||||
$this->repo = new FSRepo( array(
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class PNGHandlerTest extends MediaWikiTestCase {
|
|||
$this->filePath = __DIR__ . '/../../data/media';
|
||||
$this->backend = new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array( 'data' => $this->filePath )
|
||||
) );
|
||||
$this->repo = new FSRepo( array(
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class SvgTest extends MediaWikiTestCase {
|
|||
|
||||
$this->backend = new FSFileBackend( array(
|
||||
'name' => 'localtesting',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array( 'data' => $this->filePath )
|
||||
) );
|
||||
$this->repo = new FSRepo( array(
|
||||
|
|
|
|||
|
|
@ -306,6 +306,8 @@ class NewParserTest extends MediaWikiTestCase {
|
|||
}
|
||||
}
|
||||
$useConfig['name'] = 'local-backend'; // swap name
|
||||
unset( $useConfig['lockManager'] );
|
||||
unset( $useConfig['fileJournal'] );
|
||||
$class = $conf['class'];
|
||||
self::$backendToUse = new $class( $useConfig );
|
||||
$backend = self::$backendToUse;
|
||||
|
|
@ -316,7 +318,7 @@ class NewParserTest extends MediaWikiTestCase {
|
|||
# informations.
|
||||
$backend = new MockFileBackend( array(
|
||||
'name' => 'local-backend',
|
||||
'lockManager' => 'nullLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array(
|
||||
'local-public' => "$uploadDir",
|
||||
'local-thumb' => "$uploadDir/thumb",
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
|
|||
'transformVia404' => false,
|
||||
'backend' => new FSFileBackend( array(
|
||||
'name' => 'local-backend',
|
||||
'lockManager' => 'fsLockManager',
|
||||
'wikiId' => wfWikiId(),
|
||||
'containerPaths' => array(
|
||||
'local-public' => wfTempDir() . '/test-repo/public',
|
||||
'local-thumb' => wfTempDir() . '/test-repo/thumb',
|
||||
|
|
|
|||
Loading…
Reference in a new issue