Pingback: Make Pingback a MediaWiki service

Change-Id: Ib93fb4e0098d32a8e9798b6e2109df4d347c23ce
This commit is contained in:
Derick Alangi 2023-05-31 16:00:55 +03:00
parent 82b378c3b0
commit 2dcae8e9b7
3 changed files with 25 additions and 14 deletions

View file

@ -79,6 +79,7 @@ use MediaWiki\FileBackend\LockManager\LockManagerGroupFactory;
use MediaWiki\HookContainer\HookContainer; use MediaWiki\HookContainer\HookContainer;
use MediaWiki\HookContainer\HookRunner; use MediaWiki\HookContainer\HookRunner;
use MediaWiki\Http\HttpRequestFactory; use MediaWiki\Http\HttpRequestFactory;
use MediaWiki\Installer\Pingback;
use MediaWiki\Interwiki\InterwikiLookup; use MediaWiki\Interwiki\InterwikiLookup;
use MediaWiki\Interwiki\NullInterwikiLookup; use MediaWiki\Interwiki\NullInterwikiLookup;
use MediaWiki\JobQueue\JobFactory; use MediaWiki\JobQueue\JobFactory;
@ -1668,6 +1669,15 @@ class MediaWikiServices extends ServiceContainer {
return $this->getService( 'PermissionManager' ); return $this->getService( 'PermissionManager' );
} }
/**
* @since 1.41
* @return Pingback
* @internal
*/
public function getPingback(): Pingback {
return $this->getService( 'Pingback' );
}
/** /**
* @since 1.40 * @since 1.40
* @return PoolCounterFactory * @return PoolCounterFactory

View file

@ -89,6 +89,7 @@ use MediaWiki\HookContainer\HookContainer;
use MediaWiki\HookContainer\HookRunner; use MediaWiki\HookContainer\HookRunner;
use MediaWiki\HookContainer\StaticHookRegistry; use MediaWiki\HookContainer\StaticHookRegistry;
use MediaWiki\Http\HttpRequestFactory; use MediaWiki\Http\HttpRequestFactory;
use MediaWiki\Installer\Pingback;
use MediaWiki\Interwiki\ClassicInterwikiLookup; use MediaWiki\Interwiki\ClassicInterwikiLookup;
use MediaWiki\Interwiki\InterwikiLookup; use MediaWiki\Interwiki\InterwikiLookup;
use MediaWiki\JobQueue\JobFactory; use MediaWiki\JobQueue\JobFactory;
@ -1583,6 +1584,16 @@ return [
); );
}, },
'Pingback' => static function ( MediaWikiServices $services ): PingBack {
return new Pingback(
$services->getMainConfig(),
$services->getDBLoadBalancerFactory(),
ObjectCache::getLocalClusterInstance(),
$services->getHttpRequestFactory(),
LoggerFactory::getInstance( 'Pingback' )
);
},
'PoolCounterFactory' => static function ( MediaWikiServices $services ): PoolCounterFactory { 'PoolCounterFactory' => static function ( MediaWikiServices $services ): PoolCounterFactory {
$mainConfig = $services->getMainConfig(); $mainConfig = $services->getMainConfig();
return new PoolCounterFactory( return new PoolCounterFactory(

View file

@ -27,11 +27,9 @@ use Config;
use DeferredUpdates; use DeferredUpdates;
use FormatJson; use FormatJson;
use MediaWiki\Http\HttpRequestFactory; use MediaWiki\Http\HttpRequestFactory;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MainConfigNames; use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices; use MediaWiki\MediaWikiServices;
use MWCryptRand; use MWCryptRand;
use ObjectCache;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Wikimedia\Rdbms\DBError; use Wikimedia\Rdbms\DBError;
use Wikimedia\Rdbms\IConnectionProvider; use Wikimedia\Rdbms\IConnectionProvider;
@ -302,7 +300,8 @@ class Pingback {
* sent and (if so) proceed to send it. * sent and (if so) proceed to send it.
*/ */
public static function schedulePingback(): void { public static function schedulePingback(): void {
$config = MediaWikiServices::getInstance()->getMainConfig(); $services = MediaWikiServices::getInstance();
$config = $services->getMainConfig();
if ( !$config->get( MainConfigNames::Pingback ) ) { if ( !$config->get( MainConfigNames::Pingback ) ) {
// Fault tolerance: // Fault tolerance:
// Pingback is unusual. On a plain install of MediaWiki, it is likely the only // Pingback is unusual. On a plain install of MediaWiki, it is likely the only
@ -311,17 +310,8 @@ class Pingback {
// or DB_PRIMARY have issues, allow this to be turned off completely. (T269516) // or DB_PRIMARY have issues, allow this to be turned off completely. (T269516)
return; return;
} }
DeferredUpdates::addCallableUpdate( static function () { DeferredUpdates::addCallableUpdate( static function () use ( $services ) {
// Avoid re-use of $config as that would hold the same object from $services->getPingback()->run();
// the outer call via Setup.php, all the way here through post-send.
$instance = new Pingback(
MediaWikiServices::getInstance()->getMainConfig(),
MediaWikiServices::getInstance()->getDBLoadBalancerFactory(),
ObjectCache::getLocalClusterInstance(),
MediaWikiServices::getInstance()->getHttpRequestFactory(),
LoggerFactory::getInstance( 'Pingback' )
);
$instance->run();
} ); } );
} }
} }