Convert EventRelayerGroup to services infrastructure
authorStanislav Malyshev <smalyshev@gmail.com>
Sat, 23 Apr 2016 00:09:14 +0000 (17:09 -0700)
committerStanislav Malyshev <smalyshev@gmail.com>
Mon, 25 Apr 2016 21:22:31 +0000 (14:22 -0700)
Change-Id: If55ddf441de69189c7fcdd3440f899c6b14f690f

includes/EventRelayerGroup.php
includes/MediaWikiServices.php
includes/ServiceWiring.php
includes/deferred/CdnCacheUpdate.php
includes/objectcache/ObjectCache.php
tests/phpunit/includes/MediaWikiServicesTest.php

index 9dfac79..9360693 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+use MediaWiki\MediaWikiServices;
+
 /**
  * Factory class for spawning EventRelayer objects using configuration
  *
@@ -12,25 +14,19 @@ class EventRelayerGroup {
        /** @var EventRelayer[] */
        protected $relayers = [];
 
-       /** @var EventRelayerGroup */
-       protected static $instance = null;
-
        /**
-        * @param Config $config
+        * @param array[] $config Channel configuration
         */
-       protected function __construct( Config $config ) {
-               $this->configByChannel = $config->get( 'EventRelayerConfig' );
+       public function __construct( array $config ) {
+               $this->configByChannel = $config;
        }
 
        /**
+        * @deprecated since 1.27 Use MediaWikiServices::getInstance()->getEventRelayerGroup()
         * @return EventRelayerGroup
         */
        public static function singleton() {
-               if ( !self::$instance ) {
-                       self::$instance = new self( RequestContext::getMain()->getConfig() );
-               }
-
-               return self::$instance;
+               return MediaWikiServices::getInstance()->getEventRelayerGroup();
        }
 
        /**
index 3f4d8ed..9a942a5 100644 (file)
@@ -152,6 +152,13 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'StatsdDataFactory' );
        }
 
+       /**
+        * @return EventRelayerGroup
+        */
+       public function getEventRelayerGroup() {
+               return $this->getService( 'EventRelayerGroup' );
+       }
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service getter here, don't forget to add a test
        // case for it in MediaWikiServicesTest::provideGetters() and in
index 7e1d4e3..991a67d 100644 (file)
@@ -78,6 +78,10 @@ return [
                );
        },
 
+       'EventRelayerGroup' => function( MediaWikiServices $services ) {
+               return new EventRelayerGroup( $services->getMainConfig()->get( 'EventRelayerConfig' ) );
+       },
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter function
        // in the MediaWikiServices class. The convenience getter should just call
index 32f6adc..65ff9f3 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Assert\Assert;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Handles purging appropriate CDN URLs given a title (or titles)
@@ -109,7 +110,8 @@ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate {
                wfDebugLog( 'squid', __METHOD__ . ': ' . implode( ' ', $urlArr ) );
 
                // Reliably broadcast the purge to all edge nodes
-               $relayer = EventRelayerGroup::singleton()->getRelayer( 'cdn-url-purges' );
+               $relayer = MediaWikiServices::getInstance()->getEventRelayerGroup()
+                                       ->getRelayer( 'cdn-url-purges' );
                $relayer->notify(
                        'cdn-url-purges',
                        [
index e9f2211..24846e6 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Functions to get cache objects
@@ -299,7 +300,8 @@ class ObjectCache {
 
                $params = $wgWANObjectCaches[$id];
                foreach ( $params['channels'] as $action => $channel ) {
-                       $params['relayers'][$action] = EventRelayerGroup::singleton()->getRelayer( $channel );
+                       $params['relayers'][$action] = MediaWikiServices::getInstance()->getEventRelayerGroup()
+                               ->getRelayer( $channel );
                        $params['channels'][$action] = $channel;
                }
                $params['cache'] = self::newFromId( $params['cacheId'] );
index 1889575..a89bd90 100644 (file)
@@ -25,6 +25,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase {
                        'SiteStore' => [ 'getSiteStore', SiteStore::class ],
                        'SiteLookup' => [ 'getSiteLookup', SiteLookup::class ],
                        'StatsdDataFactory' => [ 'getStatsdDataFactory', StatsdDataFactory::class ],
+                       'EventRelayerGroup' => [ 'getEventRelayerGroup', EventRelayerGroup::class ],
                ];
        }
 
@@ -49,6 +50,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase {
                        'SiteStore' => [ 'SiteStore', SiteStore::class ],
                        'SiteLookup' => [ 'SiteLookup', SiteLookup::class ],
                        'StatsdDataFactory' => [ 'StatsdDataFactory', StatsdDataFactory::class ],
+                       'EventRelayerGroup' => [ 'EventRelayerGroup', EventRelayerGroup::class ],
                ];
        }