From: Daniel Kinzler Date: Wed, 7 Aug 2019 13:56:30 +0000 (+0000) Subject: Revert "Add small HtmlCacheUpdater service class to normalize purging code" X-Git-Tag: 1.34.0-rc.0~764^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/pie.php?a=commitdiff_plain;h=aa4da3c2e8eb26afa182a8d86581ba4cd7f38bc2;p=lhc%2Fweb%2Fwiklou.git Revert "Add small HtmlCacheUpdater service class to normalize purging code" This reverts commit 35da1bbd7cb8b4414c4fbcf331473f1024bc638d. Reason for revert: wrong tab, wrong patch. Ooops. Change-Id: I5828fff6308d43460a3b2b10f60996409181f8b3 --- diff --git a/RELEASE-NOTES-1.34 b/RELEASE-NOTES-1.34 index 56a886e447..8ecc469d67 100644 --- a/RELEASE-NOTES-1.34 +++ b/RELEASE-NOTES-1.34 @@ -92,8 +92,6 @@ For notes on 1.33.x and older releases, see HISTORY. to add fields to Special:Mute. * (T100896) Skin authors can define custom OOUI themes using OOUIThemePaths. See for details. -* The HtmlCacheUpdater service was added to unify the logic of purging CDN cache - and HTML file cache to simplify callers and make them more consistent. === External library changes in 1.34 === @@ -437,7 +435,6 @@ because of Phabricator reports. * SearchEngine::textAlreadyUpdatedForIndex() is deprecated, given the deprecation above this method is no longer needed/called and should not be implemented by SearchEngine implementation. -* Title::purgeSquid is deprecated. Use MediaWikiServices::getHtmlCacheUpdater. === Other changes in 1.34 === * … diff --git a/autoload.php b/autoload.php index ed6bb12aa6..0208a6d783 100644 --- a/autoload.php +++ b/autoload.php @@ -642,8 +642,6 @@ $wgAutoloadLocalClasses = [ 'Hooks' => __DIR__ . '/includes/Hooks.php', 'Html' => __DIR__ . '/includes/Html.php', 'HtmlArmor' => __DIR__ . '/includes/libs/HtmlArmor.php', - 'HtmlCacheUpdater' => __DIR__ . '/includes/cache/HtmlCacheUpdater.php', - 'HtmlFileCacheUpdate' => __DIR__ . '/includes/deferred/HtmlFileCacheUpdate.php', 'Http' => __DIR__ . '/includes/http/Http.php', 'HttpError' => __DIR__ . '/includes/exception/HttpError.php', 'HttpStatus' => __DIR__ . '/includes/libs/HttpStatus.php', diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index fb30199ffe..7fda45280a 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -68,7 +68,6 @@ use Wikimedia\Services\NoSuchServiceException; use MediaWiki\Interwiki\InterwikiLookup; use MagicWordFactory; use MediaWiki\Storage\PageEditStash; -use HtmlCacheUpdater; /** * Service locator for MediaWiki core services. @@ -596,14 +595,6 @@ class MediaWikiServices extends ServiceContainer { return $this->getService( 'GenderCache' ); } - /** - * @return HtmlCacheUpdater - * @since 1.34 - */ - public function getHtmlCacheUpdater() { - return $this->getService( 'HtmlCacheUpdater' ); - } - /** * @since 1.31 * @return HttpRequestFactory diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index d6b4d65433..9073de1c0e 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -218,10 +218,6 @@ return [ return new GenderCache( $services->getNamespaceInfo() ); }, - 'HtmlCacheUpdater' => function ( MediaWikiServices $services ) : HtmlCacheUpdater { - return new HtmlCacheUpdater(); - }, - 'HttpRequestFactory' => function ( MediaWikiServices $services ) : HttpRequestFactory { return new HttpRequestFactory(); diff --git a/includes/Title.php b/includes/Title.php index 674767d37b..281f75bac1 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -3432,10 +3432,12 @@ class Title implements LinkTarget, IDBAccessObject { /** * Purge all applicable CDN URLs - * @deprecated 1.34 Use HtmlCacheUpdater */ public function purgeSquid() { - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $this->getCdnUrls() ); + DeferredUpdates::addUpdate( + new CdnCacheUpdate( $this->getCdnUrls() ), + DeferredUpdates::PRESEND + ); } /** @@ -4243,21 +4245,12 @@ class Title implements LinkTarget, IDBAccessObject { * on the number of links. Typically called on create and delete. */ public function touchLinks() { - $jobs = []; - $jobs[] = HTMLCacheUpdateJob::newForBacklinks( - $this, - 'pagelinks', - [ 'causeAction' => 'page-touch' ] - ); + DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'pagelinks', 'page-touch' ) ); if ( $this->mNamespace == NS_CATEGORY ) { - $jobs[] = HTMLCacheUpdateJob::newForBacklinks( - $this, - 'categorylinks', - [ 'causeAction' => 'category-touch' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $this, 'categorylinks', 'category-touch' ) ); } - - JobQueueGroup::singleton()->lazyPush( $jobs ); } /** diff --git a/includes/cache/HTMLFileCache.php b/includes/cache/HTMLFileCache.php index 6d0b87e6e6..a0d61b259e 100644 --- a/includes/cache/HTMLFileCache.php +++ b/includes/cache/HTMLFileCache.php @@ -219,33 +219,21 @@ class HTMLFileCache extends FileCacheBase { return $text; } - /** - * @param string[] $prefixedDbKeys List of prefixed DB keys for pages to purge - * @since 1.34 - */ - public static function purge( array $prefixedDbKeys ) { - foreach ( $prefixedDbKeys as $prefixedDbKey ) { - foreach ( self::cacheablePageActions() as $type ) { - $fc = new self( $prefixedDbKey, $type ); - $fc->clearCache(); - } - } - } - /** * Clear the file caches for a page for all actions - * @param Traversable|Title[]|Title $titles + * @param Title $title * @return bool Whether $wgUseFileCache is enabled */ - public static function clearFileCache( $titles ) { + public static function clearFileCache( Title $title ) { $config = MediaWikiServices::getInstance()->getMainConfig(); + if ( !$config->get( 'UseFileCache' ) ) { return false; } - $titleIterator = ( $titles instanceof Title ) ? [ $titles ] : $titles; - foreach ( $titleIterator as $title ) { - self::purge( [ $title->getPrefixedDBkey() ] ); + foreach ( self::cacheablePageActions() as $type ) { + $fc = new self( $title, $type ); + $fc->clearCache(); } return true; diff --git a/includes/cache/HtmlCacheUpdater.php b/includes/cache/HtmlCacheUpdater.php deleted file mode 100644 index b04428c99b..0000000000 --- a/includes/cache/HtmlCacheUpdater.php +++ /dev/null @@ -1,94 +0,0 @@ -getCdnUrls() ); - } - CdnCacheUpdate::purge( $urls ); // purge once (no "rebound" purges) - } else { - DeferredUpdates::addUpdate( - HtmlFileCacheUpdate::newFromTitles( $titles ), - DeferredUpdates::PRESEND - ); - DeferredUpdates::addUpdate( - CdnCacheUpdate::newFromTitles( $titles, $urls ), - DeferredUpdates::PRESEND - ); - } - } -} diff --git a/includes/deferred/CdnCacheUpdate.php b/includes/deferred/CdnCacheUpdate.php index a867f2062e..66ce9a3ddf 100644 --- a/includes/deferred/CdnCacheUpdate.php +++ b/includes/deferred/CdnCacheUpdate.php @@ -24,12 +24,12 @@ use Wikimedia\Assert\Assert; use MediaWiki\MediaWikiServices; /** - * Handles purging the appropriate CDN objects given a list of URLs or Title instances + * Handles purging appropriate CDN URLs given a title (or titles) * @ingroup Cache */ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate { /** @var string[] Collection of URLs to purge */ - private $urls = []; + protected $urls = []; /** * @param string[] $urlArr Collection of URLs to purge @@ -59,9 +59,12 @@ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate { $urlArr = array_merge( $urlArr, $title->getCdnUrls() ); } - return new self( $urlArr ); + return new CdnCacheUpdate( $urlArr ); } + /** + * Purges the list of URLs passed to the constructor. + */ public function doUpdate() { global $wgCdnReboundPurgeDelay; @@ -95,9 +98,10 @@ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate { wfDebugLog( 'squid', __METHOD__ . ': ' . implode( ' ', $urlArr ) ); // Reliably broadcast the purge to all edge nodes + $relayer = MediaWikiServices::getInstance()->getEventRelayerGroup() + ->getRelayer( 'cdn-url-purges' ); $ts = microtime( true ); - $relayerGroup = MediaWikiServices::getInstance()->getEventRelayerGroup(); - $relayerGroup->getRelayer( 'cdn-url-purges' )->notifyMulti( + $relayer->notifyMulti( 'cdn-url-purges', array_map( function ( $url ) use ( $ts ) { diff --git a/includes/deferred/HTMLCacheUpdate.php b/includes/deferred/HTMLCacheUpdate.php index 3dd533db7e..29846bfb77 100644 --- a/includes/deferred/HTMLCacheUpdate.php +++ b/includes/deferred/HTMLCacheUpdate.php @@ -22,32 +22,39 @@ */ /** - * Class to invalidate the HTML/file cache of all the pages linking to a given title. + * Class to invalidate the HTML cache of all the pages linking to a given title. * * @ingroup Cache - * @deprecated Since 1.34; Enqueue jobs from HTMLCacheUpdateJob::newForBacklinks instead */ class HTMLCacheUpdate extends DataUpdate { /** @var Title */ - private $title; + public $mTitle; + /** @var string */ - private $table; + public $mTable; /** - * @param Title $title + * @param Title $titleTo * @param string $table + * @param string $causeAction Triggering action + * @param string $causeAgent Triggering user */ - public function __construct( Title $title, $table ) { - $this->title = $title; - $this->table = $table; + function __construct( + Title $titleTo, $table, $causeAction = 'unknown', $causeAgent = 'unknown' + ) { + $this->mTitle = $titleTo; + $this->mTable = $table; + $this->causeAction = $causeAction; + $this->causeAgent = $causeAgent; } public function doUpdate() { $job = HTMLCacheUpdateJob::newForBacklinks( - $this->title, - $this->table, + $this->mTitle, + $this->mTable, [ 'causeAction' => $this->getCauseAction(), 'causeAgent' => $this->getCauseAgent() ] ); + JobQueueGroup::singleton()->lazyPush( $job ); } } diff --git a/includes/deferred/HtmlFileCacheUpdate.php b/includes/deferred/HtmlFileCacheUpdate.php deleted file mode 100644 index 7be8b61eab..0000000000 --- a/includes/deferred/HtmlFileCacheUpdate.php +++ /dev/null @@ -1,61 +0,0 @@ -prefixedDbKeys = $prefixedDbKeys; - } - - /** - * Create an update object from an array of Title objects, or a TitleArray object - * - * @param Traversable|Title[] $titles - * @return HtmlFileCacheUpdate - */ - public static function newFromTitles( $titles ) { - $prefixedDbKeys = []; - foreach ( $titles as $title ) { - $prefixedDbKeys[] = $title->getPrefixedDBkey(); - } - - return new self( $prefixedDbKeys ); - } - - public function doUpdate() { - $config = MediaWikiServices::getInstance()->getMainConfig(); - if ( $config->get( 'UseFileCache' ) ) { - HTMLFileCache::purge( $this->prefixedDbKeys ); - } - } -} diff --git a/includes/deferred/LinksUpdate.php b/includes/deferred/LinksUpdate.php index ff293cb9d8..74e236fd4d 100644 --- a/includes/deferred/LinksUpdate.php +++ b/includes/deferred/LinksUpdate.php @@ -1066,7 +1066,6 @@ class LinksUpdate extends DataUpdate { private function invalidateProperties( $changed ) { global $wgPagePropLinkInvalidations; - $jobs = []; foreach ( $changed as $name => $value ) { if ( isset( $wgPagePropLinkInvalidations[$name] ) ) { $inv = $wgPagePropLinkInvalidations[$name]; @@ -1074,16 +1073,12 @@ class LinksUpdate extends DataUpdate { $inv = [ $inv ]; } foreach ( $inv as $table ) { - $jobs[] = HTMLCacheUpdateJob::newForBacklinks( - $this->mTitle, - $table, - [ 'causeAction' => 'page-props' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $this->mTitle, $table, 'page-props' ) ); } } } - - JobQueueGroup::singleton()->lazyPush( $jobs ); } /** diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php index eca5464942..ee7ee6f90d 100644 --- a/includes/filerepo/file/File.php +++ b/includes/filerepo/file/File.php @@ -1453,7 +1453,7 @@ abstract class File implements IDBAccessObject { $title = $this->getTitle(); if ( $title ) { $title->invalidateCache(); - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $title ); + $title->purgeSquid(); } } @@ -1469,12 +1469,9 @@ abstract class File implements IDBAccessObject { // Purge cache of all pages using this file $title = $this->getTitle(); if ( $title ) { - $job = HTMLCacheUpdateJob::newForBacklinks( - $title, - 'imagelinks', - [ 'causeAction' => 'file-purge' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $title, 'imagelinks', 'file-purge' ) ); - JobQueueGroup::singleton()->lazyPush( $job ); } } diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index 989d22283f..54fc251f4b 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -1047,7 +1047,10 @@ class LocalFile extends File { $this->purgeThumbnails( $options ); // Purge CDN cache for this file - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $this->getUrl() ); + DeferredUpdates::addUpdate( + new CdnCacheUpdate( [ $this->getUrl() ] ), + DeferredUpdates::PRESEND + ); } /** @@ -1070,7 +1073,7 @@ class LocalFile extends File { foreach ( $files as $file ) { $urls[] = $this->getArchiveThumbUrl( $archiveName, $file ); } - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $urls ); + DeferredUpdates::addUpdate( new CdnCacheUpdate( $urls ), DeferredUpdates::PRESEND ); } /** @@ -1102,7 +1105,7 @@ class LocalFile extends File { $this->purgeThumbList( $dir, $files ); // Purge the CDN - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $urls ); + DeferredUpdates::addUpdate( new CdnCacheUpdate( $urls ), DeferredUpdates::PRESEND ); } /** @@ -1722,9 +1725,8 @@ class LocalFile extends File { } } else { # Existing file page: invalidate description page cache - $title = $wikiPage->getTitle(); - $title->invalidateCache(); - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $title ); + $wikiPage->getTitle()->invalidateCache(); + $wikiPage->getTitle()->purgeSquid(); # Allow the new file version to be patrolled from the page footer Article::purgePatrolFooterCache( $descId ); } @@ -1772,8 +1774,10 @@ class LocalFile extends File { # Delete old thumbnails $this->purgeThumbnails(); # Remove the old file from the CDN cache - MediaWikiServices::getInstance() - ->getHtmlCacheUpdater()->purge( $this->getUrl() ); + DeferredUpdates::addUpdate( + new CdnCacheUpdate( [ $this->getUrl() ] ), + DeferredUpdates::PRESEND + ); } else { # Update backlink pages pointing to this title if created LinksUpdate::queueRecursiveJobsForTable( @@ -1796,12 +1800,9 @@ class LocalFile extends File { } # Invalidate cache for all pages using this file - $job = HTMLCacheUpdateJob::newForBacklinks( - $this->getTitle(), - 'imagelinks', - [ 'causeAction' => 'file-upload', 'causeAgent' => $user->getName() ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $this->getTitle(), 'imagelinks', 'file-upload' ) ); - JobQueueGroup::singleton()->lazyPush( $job ); return Status::newGood(); } @@ -2003,7 +2004,7 @@ class LocalFile extends File { foreach ( $archiveNames as $archiveName ) { $purgeUrls[] = $this->getArchiveUrl( $archiveName ); } - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $purgeUrls ); + DeferredUpdates::addUpdate( new CdnCacheUpdate( $purgeUrls ), DeferredUpdates::PRESEND ); return $status; } @@ -2040,8 +2041,10 @@ class LocalFile extends File { $this->purgeDescription(); } - $url = $this->getArchiveUrl( $archiveName ); - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $url ); + DeferredUpdates::addUpdate( + new CdnCacheUpdate( [ $this->getArchiveUrl( $archiveName ) ] ), + DeferredUpdates::PRESEND + ); return $status; } diff --git a/includes/jobqueue/jobs/HTMLCacheUpdateJob.php b/includes/jobqueue/jobs/HTMLCacheUpdateJob.php index a2e47343db..73fa947790 100644 --- a/includes/jobqueue/jobs/HTMLCacheUpdateJob.php +++ b/includes/jobqueue/jobs/HTMLCacheUpdateJob.php @@ -25,7 +25,7 @@ use MediaWiki\MediaWikiServices; /** - * Job to purge the HTML/file cache for all pages that link to or use another page or file + * Job to purge the cache for all pages that link to or use another page or file * * This job comes in a few variants: * - a) Recursive jobs to purge caches for backlink pages for a given title. @@ -110,7 +110,7 @@ class HTMLCacheUpdateJob extends Job { * @param array $pages Map of (page ID => (namespace, DB key)) entries */ protected function invalidateTitles( array $pages ) { - global $wgUpdateRowsPerQuery, $wgPageLanguageUseDB; + global $wgUpdateRowsPerQuery, $wgUseFileCache, $wgPageLanguageUseDB; // Get all page IDs in this query into an array $pageIds = array_keys( $pages ); @@ -160,11 +160,20 @@ class HTMLCacheUpdateJob extends Job { __METHOD__ ) ); - // Update CDN and file caches (avoiding secondary purge overhead) - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( - $titleArray, - HtmlCacheUpdater::IMMEDIATE_WITHOUT_REBOUND - ); + // Update CDN; call purge() directly so as to not bother with secondary purges + $urls = []; + foreach ( $titleArray as $title ) { + /** @var Title $title */ + $urls = array_merge( $urls, $title->getCdnUrls() ); + } + CdnCacheUpdate::purge( $urls ); + + // Update file cache + if ( $wgUseFileCache ) { + foreach ( $titleArray as $title ) { + HTMLFileCache::clearFileCache( $title ); + } + } } public function getDeduplicationInfo() { diff --git a/includes/page/PageArchive.php b/includes/page/PageArchive.php index 19e417abe4..d69a433d9c 100644 --- a/includes/page/PageArchive.php +++ b/includes/page/PageArchive.php @@ -756,14 +756,10 @@ class PageArchive { Hooks::run( 'ArticleUndelete', [ &$this->title, $created, $comment, $oldPageId, $restoredPages ] ); - if ( $this->title->getNamespace() == NS_FILE ) { - $job = HTMLCacheUpdateJob::newForBacklinks( - $this->title, - 'imagelinks', - [ 'causeAction' => 'imagelinks', 'causeAgent' => 'file-restore' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $this->title, 'imagelinks', 'file-restore' ) ); - JobQueueGroup::singleton()->lazyPush( $job ); } } diff --git a/includes/page/WikiFilePage.php b/includes/page/WikiFilePage.php index fd9f7b24d8..acd506ba79 100644 --- a/includes/page/WikiFilePage.php +++ b/includes/page/WikiFilePage.php @@ -176,12 +176,9 @@ class WikiFilePage extends WikiPage { if ( $this->mFile->exists() ) { wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" ); - $job = HTMLCacheUpdateJob::newForBacklinks( - $this->mTitle, - 'imagelinks', - [ 'causeAction' => 'file-purge' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $this->mTitle, 'imagelinks', 'file-purge' ) ); - JobQueueGroup::singleton()->lazyPush( $job ); } else { wfDebug( 'ImagePage::doPurge no image for ' . $this->mFile->getName() . "; limiting purge to cache only\n" ); diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 33fd4721d4..3bc9f7c0f8 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -1294,8 +1294,13 @@ class WikiPage implements Page, IDBAccessObject { $this->mTitle->invalidateCache(); - // Clear file cache and send purge after above page_touched update was committed - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $this->mTitle ); + // Clear file cache + HTMLFileCache::clearFileCache( $this->getTitle() ); + // Send purge after above page_touched update was committed + DeferredUpdates::addUpdate( + new CdnCacheUpdate( $this->mTitle->getCdnUrls() ), + DeferredUpdates::PRESEND + ); if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { $messageCache = MessageCache::singleton(); @@ -3379,20 +3384,18 @@ class WikiPage implements Page, IDBAccessObject { // Update existence markers on article/talk tabs... $other = $title->getOtherPage(); - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( [ $title, $other ] ); + $other->purgeSquid(); $title->touchLinks(); + $title->purgeSquid(); $title->deleteTitleProtection(); MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title ); // Invalidate caches of articles which include this page - $job = HTMLCacheUpdateJob::newForBacklinks( - $title, - 'templatelinks', - [ 'causeAction' => 'page-create' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $title, 'templatelinks', 'page-create' ) ); - JobQueueGroup::singleton()->lazyPush( $job ); if ( $title->getNamespace() == NS_CATEGORY ) { // Load the Category object, which will schedule a job to create @@ -3412,14 +3415,19 @@ class WikiPage implements Page, IDBAccessObject { // TODO: move this into a PageEventEmitter service // Update existence markers on article/talk tabs... + // Clear Backlink cache first so that purge jobs use more up-to-date backlink information + BacklinkCache::get( $title )->clear(); $other = $title->getOtherPage(); - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( [ $title, $other ] ); + $other->purgeSquid(); $title->touchLinks(); + $title->purgeSquid(); MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title ); + // File cache + HTMLFileCache::clearFileCache( $title ); InfoAction::invalidateCache( $title ); // Messages @@ -3429,12 +3437,9 @@ class WikiPage implements Page, IDBAccessObject { // Images if ( $title->getNamespace() == NS_FILE ) { - $job = HTMLCacheUpdateJob::newForBacklinks( - $title, - 'imagelinks', - [ 'causeAction' => 'page-delete' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $title, 'imagelinks', 'page-delete' ) ); - JobQueueGroup::singleton()->lazyPush( $job ); } // User talk pages @@ -3467,28 +3472,26 @@ class WikiPage implements Page, IDBAccessObject { ) { // TODO: move this into a PageEventEmitter service - $jobs = []; - if ( $slotsChanged === null || in_array( SlotRecord::MAIN, $slotsChanged ) ) { + if ( $slotsChanged === null || in_array( SlotRecord::MAIN, $slotsChanged ) ) { // Invalidate caches of articles which include this page. // Only for the main slot, because only the main slot is transcluded. // TODO: MCR: not true for TemplateStyles! [SlotHandler] - $jobs[] = HTMLCacheUpdateJob::newForBacklinks( - $title, - 'templatelinks', - [ 'causeAction' => 'page-edit' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $title, 'templatelinks', 'page-edit' ) ); } + // Invalidate the caches of all pages which redirect here - $jobs[] = HTMLCacheUpdateJob::newForBacklinks( - $title, - 'redirect', - [ 'causeAction' => 'page-edit' ] + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $title, 'redirect', 'page-edit' ) ); - JobQueueGroup::singleton()->lazyPush( $jobs ); MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title ); - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $title ); + // Purge CDN for this page only + $title->purgeSquid(); + // Clear file cache for this page only + HTMLFileCache::clearFileCache( $title ); // Purge ?action=info cache $revid = $revision ? $revision->getId() : null; diff --git a/includes/revisiondelete/RevDelFileList.php b/includes/revisiondelete/RevDelFileList.php index d69fa36ca5..ca7bc040d0 100644 --- a/includes/revisiondelete/RevDelFileList.php +++ b/includes/revisiondelete/RevDelFileList.php @@ -122,7 +122,10 @@ class RevDelFileList extends RevDelList { $file->purgeOldThumbnails( $archiveName ); $purgeUrls[] = $file->getArchiveUrl( $archiveName ); } - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $purgeUrls ); + DeferredUpdates::addUpdate( + new CdnCacheUpdate( $purgeUrls ), + DeferredUpdates::PRESEND + ); return Status::newGood(); } diff --git a/includes/revisiondelete/RevDelRevisionList.php b/includes/revisiondelete/RevDelRevisionList.php index 1eaf0cc96c..0705503e9b 100644 --- a/includes/revisiondelete/RevDelRevisionList.php +++ b/includes/revisiondelete/RevDelRevisionList.php @@ -19,7 +19,6 @@ * @ingroup RevisionDelete */ -use MediaWiki\MediaWikiServices; use MediaWiki\Storage\RevisionRecord; use Wikimedia\Rdbms\FakeResultWrapper; use Wikimedia\Rdbms\IDatabase; @@ -178,10 +177,9 @@ class RevDelRevisionList extends RevDelList { } public function doPostCommitUpdates( array $visibilityChangeMap ) { - MediaWikiServices::getInstance()->getHtmlCacheUpdater()->purge( $this->title ); + $this->title->purgeSquid(); // Extensions that require referencing previous revisions may need this - Hooks::run( 'ArticleRevisionVisibilitySet', - [ $this->title, $this->ids, $visibilityChangeMap ] ); + Hooks::run( 'ArticleRevisionVisibilitySet', [ $this->title, $this->ids, $visibilityChangeMap ] ); return Status::newGood(); } }