From: Aaron Schulz Date: Fri, 22 Apr 2016 19:52:06 +0000 (-0700) Subject: Make WAN cache config use $wgEventRelayerConfig X-Git-Tag: 1.31.0-rc.0~7188^2 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/comptes/ajouter.php?a=commitdiff_plain;h=09a0a5e4f6b6ee2117e32e15e67d166c426a727f;p=lhc%2Fweb%2Fwiklou.git Make WAN cache config use $wgEventRelayerConfig This makes the channels more explicit and defined in a less ad-hoc way. Systems like Kafka would prefer explicit channel definitions anyway, so the channel prefix just obscures things. Change-Id: I5631eb1b1382083396a0f08904d9273cc92601e8 --- diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 2a30352124..7d771c1ea7 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2223,27 +2223,24 @@ $wgMainWANCache = false; * * The format is an associative array where the key is a cache identifier, and * the value is an associative array of parameters. The "cacheId" parameter is - * a cache identifier from $wgObjectCaches. The "relayerConfig" parameter is an - * array used to construct an EventRelayer object. The "pool" parameter is a - * string that is used as a PubSub channel prefix. The "loggroup" parameter - * controls where log events are sent. + * a cache identifier from $wgObjectCaches. The "channels" parameter is a map of + * actions ('purge') to PubSub channels defined in $wgEventRelayerConfig. + * The "loggroup" parameter controls where log events are sent. * * @since 1.26 */ $wgWANObjectCaches = [ CACHE_NONE => [ - 'class' => 'WANObjectCache', - 'cacheId' => CACHE_NONE, - 'pool' => 'mediawiki-main-none', - 'relayerConfig' => [ 'class' => 'EventRelayerNull' ] + 'class' => 'WANObjectCache', + 'cacheId' => CACHE_NONE, + 'channels' => [] ] /* Example of a simple single data-center cache: - 'memcached-php' => array( - 'class' => 'WANObjectCache', - 'cacheId' => 'memcached-php', - 'pool' => 'mediawiki-main-memcached', - 'relayerConfig' => array( 'class' => 'EventRelayerNull' ) - ) + 'memcached-php' => [ + 'class' => 'WANObjectCache', + 'cacheId' => 'memcached-php', + 'channels' => [ 'purge' => 'wancache-main-memcached-purge' ] + ] */ ]; diff --git a/includes/Setup.php b/includes/Setup.php index cddb4369f9..9898b84313 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -618,10 +618,9 @@ if ( $wgMainWANCache === false ) { // Sites using multiple datacenters can configure a relayer. $wgMainWANCache = 'mediawiki-main-default'; $wgWANObjectCaches[$wgMainWANCache] = [ - 'class' => 'WANObjectCache', - 'cacheId' => $wgMainCacheType, - 'pool' => 'mediawiki-main-default', - 'relayerConfig' => [ 'class' => 'EventRelayerNull' ] + 'class' => 'WANObjectCache', + 'cacheId' => $wgMainCacheType, + 'channels' => [ 'purge' => 'wancache-main-default-purge' ] ]; } diff --git a/includes/libs/eventrelayer/EventRelayer.php b/includes/libs/eventrelayer/EventRelayer.php index f28a4c0c26..b0cd413699 100644 --- a/includes/libs/eventrelayer/EventRelayer.php +++ b/includes/libs/eventrelayer/EventRelayer.php @@ -54,10 +54,6 @@ abstract class EventRelayer implements LoggerAwareInterface { return $this->doNotify( $channel, $events ); } - /** - * Set logger instance. - * @param LoggerInterface $logger - */ public function setLogger( LoggerInterface $logger ) { $this->logger = $logger; } diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php index dd2e0d5d4b..57cecd0e78 100644 --- a/includes/libs/objectcache/WANObjectCache.php +++ b/includes/libs/objectcache/WANObjectCache.php @@ -69,10 +69,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { protected $cache; /** @var HashBagOStuff Script instance PHP cache */ protected $procCache; - /** @var string Cache pool name */ - protected $pool; + /** @var string Purge channel name */ + protected $purgeChannel; /** @var EventRelayer Bus that handles purge broadcasts */ - protected $relayer; + protected $purgeRelayer; /** @var LoggerInterface */ protected $logger; @@ -134,25 +134,27 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { const MAX_PC_KEYS = 1000; // max keys to keep in process cache + const DEFAULT_PURGE_CHANNEL = 'wancache-purge'; + /** * @param array $params - * - cache : BagOStuff object - * - pool : pool name - * - relayer : EventRelayer object - * - logger : LoggerInterface object + * - cache : BagOStuff object for a persistent cache + * - channels : Map of (action => channel string). Actions include "purge". + * - relayers : Map of (action => EventRelayer object). Actions include "purge". + * - logger : LoggerInterface object */ public function __construct( array $params ) { $this->cache = $params['cache']; - $this->pool = $params['pool']; - $this->relayer = $params['relayer']; $this->procCache = new HashBagOStuff( [ 'maxKeys' => self::MAX_PC_KEYS ] ); + $this->purgeChannel = isset( $params['channels']['purge'] ) + ? $params['channels']['purge'] + : self::DEFAULT_PURGE_CHANNEL; + $this->purgeRelayer = isset( $params['relayers']['purge'] ) + ? $params['relayers']['purge'] + : new EventRelayerNull( [] ); $this->setLogger( isset( $params['logger'] ) ? $params['logger'] : new NullLogger() ); } - /** - * Set logger instance. - * @param LoggerInterface $logger - */ public function setLogger( LoggerInterface $logger ) { $this->logger = $logger; } @@ -950,7 +952,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { 'sbt' => true, // substitute $UNIXTIME$ with actual microtime ] ); - $ok = $this->relayer->notify( "{$this->pool}:purge", $event ); + $ok = $this->purgeRelayer->notify( $this->purgeChannel, $event ); if ( !$ok ) { $this->lastRelayError = self::ERR_RELAY; } @@ -970,7 +972,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { 'key' => $key, ] ); - $ok = $this->relayer->notify( "{$this->pool}:purge", $event ); + $ok = $this->purgeRelayer->notify( $this->purgeChannel, $event ); if ( !$ok ) { $this->lastRelayError = self::ERR_RELAY; } diff --git a/includes/objectcache/ObjectCache.php b/includes/objectcache/ObjectCache.php index bf152b6ec6..e9f2211aaf 100644 --- a/includes/objectcache/ObjectCache.php +++ b/includes/objectcache/ObjectCache.php @@ -298,8 +298,10 @@ class ObjectCache { } $params = $wgWANObjectCaches[$id]; - $class = $params['relayerConfig']['class']; - $params['relayer'] = new $class( $params['relayerConfig'] ); + foreach ( $params['channels'] as $action => $channel ) { + $params['relayers'][$action] = EventRelayerGroup::singleton()->getRelayer( $channel ); + $params['channels'][$action] = $channel; + } $params['cache'] = self::newFromId( $params['cacheId'] ); if ( isset( $params['loggroup'] ) ) { $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );