objectcache: make ObjectCache::newFromParams() defaults more consistent
Apply the same duplication logging and asyncHandler defaults for factory-based entries as constructor-based entries. Change-Id: I2aa835c5ec7932432d2c739ffa761a7bd9c21198
This commit is contained in:
parent
0296ead7b7
commit
5780011ec5
1 changed files with 40 additions and 43 deletions
|
|
@ -140,55 +140,52 @@ class ObjectCache {
|
|||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public static function newFromParams( $params ) {
|
||||
$params['logger'] = $params['logger'] ??
|
||||
LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache' );
|
||||
if ( !isset( $params['keyspace'] ) ) {
|
||||
$params['keyspace'] = self::getDefaultKeyspace();
|
||||
}
|
||||
// Apply default parameters and resolve the logger instance
|
||||
$params += [
|
||||
'logger' => LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache' ),
|
||||
'keyspace' => self::getDefaultKeyspace(),
|
||||
'asyncHandler' => [ DeferredUpdates::class, 'addCallableUpdate' ],
|
||||
'reportDupes' => true
|
||||
];
|
||||
|
||||
if ( isset( $params['factory'] ) ) {
|
||||
return call_user_func( $params['factory'], $params );
|
||||
} elseif ( isset( $params['class'] ) ) {
|
||||
$class = $params['class'];
|
||||
// Automatically set the 'async' update handler
|
||||
$params['asyncHandler'] = $params['asyncHandler']
|
||||
?? [ DeferredUpdates::class, 'addCallableUpdate' ];
|
||||
// Enable reportDupes by default
|
||||
$params['reportDupes'] = $params['reportDupes'] ?? true;
|
||||
// Do b/c logic for SqlBagOStuff
|
||||
if ( is_a( $class, SqlBagOStuff::class, true ) ) {
|
||||
if ( isset( $params['server'] ) && !isset( $params['servers'] ) ) {
|
||||
$params['servers'] = [ $params['server'] ];
|
||||
unset( $params['server'] );
|
||||
}
|
||||
// In the past it was not required to set 'dbDirectory' in $wgObjectCaches
|
||||
if ( isset( $params['servers'] ) ) {
|
||||
foreach ( $params['servers'] as &$server ) {
|
||||
if ( $server['type'] === 'sqlite' && !isset( $server['dbDirectory'] ) ) {
|
||||
$server['dbDirectory'] = MediaWikiServices::getInstance()
|
||||
->getMainConfig()->get( 'SQLiteDataDir' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !isset( $params['class'] ) ) {
|
||||
throw new InvalidArgumentException(
|
||||
'No "factory" nor "class" provided; got "' . print_r( $params, true ) . '"'
|
||||
);
|
||||
}
|
||||
|
||||
$class = $params['class'];
|
||||
|
||||
// Do b/c logic for SqlBagOStuff
|
||||
if ( is_a( $class, SqlBagOStuff::class, true ) ) {
|
||||
if ( isset( $params['server'] ) && !isset( $params['servers'] ) ) {
|
||||
$params['servers'] = [ $params['server'] ];
|
||||
unset( $params['server'] );
|
||||
}
|
||||
// In the past it was not required to set 'dbDirectory' in $wgObjectCaches
|
||||
if ( isset( $params['servers'] ) ) {
|
||||
foreach ( $params['servers'] as &$server ) {
|
||||
if ( $server['type'] === 'sqlite' && !isset( $server['dbDirectory'] ) ) {
|
||||
$server['dbDirectory'] = $GLOBALS['wgSQLiteDataDir'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Do b/c logic for MemcachedBagOStuff
|
||||
if ( is_subclass_of( $class, MemcachedBagOStuff::class ) ) {
|
||||
if ( !isset( $params['servers'] ) ) {
|
||||
$params['servers'] = $GLOBALS['wgMemCachedServers'];
|
||||
}
|
||||
if ( !isset( $params['persistent'] ) ) {
|
||||
$params['persistent'] = $GLOBALS['wgMemCachedPersistent'];
|
||||
}
|
||||
if ( !isset( $params['timeout'] ) ) {
|
||||
$params['timeout'] = $GLOBALS['wgMemCachedTimeout'];
|
||||
}
|
||||
}
|
||||
return new $class( $params );
|
||||
} else {
|
||||
throw new InvalidArgumentException( "The definition of cache type \""
|
||||
. print_r( $params, true ) . "\" lacks both "
|
||||
. "factory and class parameters." );
|
||||
}
|
||||
|
||||
// Do b/c logic for MemcachedBagOStuff
|
||||
if ( is_subclass_of( $class, MemcachedBagOStuff::class ) ) {
|
||||
$params += [
|
||||
'servers' => $GLOBALS['wgMemCachedServers'],
|
||||
'persistent' => $GLOBALS['wgMemCachedPersistent'],
|
||||
'timeout' => $GLOBALS['wgMemCachedTimeout']
|
||||
];
|
||||
}
|
||||
|
||||
return new $class( $params );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue