X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fpage%2FWikiPage.php;h=7489f446273e3d09b15043d44af18615824b607f;hb=2d250f636ae3bd88f9f221fea4a95f41cdfa60da;hp=4123c272b2a7641b84ee9f706c6b0d3cbacc5508;hpb=488a647831011f8d1e8f8969ee7ae04d2498366f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 4123c272b2..7489f44627 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -24,6 +24,8 @@ use \MediaWiki\Logger\LoggerFactory; use \MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\FakeResultWrapper; use Wikimedia\Rdbms\IDatabase; +use Wikimedia\Rdbms\DBError; +use Wikimedia\Rdbms\DBUnexpectedError; /** * Class representing a MediaWiki article and history. @@ -85,9 +87,10 @@ class WikiPage implements Page, IDBAccessObject { */ protected $mLinksUpdated = '19700101000000'; - const PURGE_CDN_CACHE = 1; // purge CDN cache for page variant URLs - const PURGE_CLUSTER_PCACHE = 2; // purge parser cache in the local datacenter - const PURGE_GLOBAL_PCACHE = 4; // set page_touched to clear parser cache in all datacenters + /** @deprecated since 1.29. Added in 1.28 for partial purging, no longer used. */ + const PURGE_CDN_CACHE = 1; + const PURGE_CLUSTER_PCACHE = 2; + const PURGE_GLOBAL_PCACHE = 4; const PURGE_ALL = 7; /** @@ -575,35 +578,12 @@ class WikiPage implements Page, IDBAccessObject { * @return Revision|null */ public function getOldestRevision() { - // Try using the replica DB first, then try the master - $continue = 2; - $db = wfGetDB( DB_REPLICA ); - $revSelectFields = Revision::selectFields(); - - $row = null; - while ( $continue ) { - $row = $db->selectRow( - [ 'revision' ], - $revSelectFields, - [ - 'rev_page' => $this->getId() - ], - __METHOD__, - [ - 'ORDER BY' => 'rev_timestamp ASC' - ] - ); - - if ( $row ) { - $continue = 0; - } else { - $db = wfGetDB( DB_MASTER ); - $continue--; - } + $rev = $this->mTitle->getFirstRevision(); + if ( !$rev ) { + $rev = $this->mTitle->getFirstRevision( Title::GAID_FOR_UPDATE ); } - - return $row ? Revision::newFromRow( $row ) : null; + return $rev; } /** @@ -1120,10 +1100,11 @@ class WikiPage implements Page, IDBAccessObject { /** * Perform the actions of a page purging - * @param integer $flags Bitfield of WikiPage::PURGE_* constants * @return bool + * @note In 1.28 (and only 1.28), this took a $flags parameter that + * controlled how much purging was done. */ - public function doPurge( $flags = self::PURGE_ALL ) { + public function doPurge() { // Avoid PHP 7.1 warning of passing $this by reference $wikiPage = $this; @@ -1131,30 +1112,15 @@ class WikiPage implements Page, IDBAccessObject { return false; } - if ( ( $flags & self::PURGE_GLOBAL_PCACHE ) == self::PURGE_GLOBAL_PCACHE ) { - // Set page_touched in the database to invalidate all DC caches - $this->mTitle->invalidateCache(); - } elseif ( ( $flags & self::PURGE_CLUSTER_PCACHE ) == self::PURGE_CLUSTER_PCACHE ) { - // Delete the parser options key in the local cluster to invalidate the DC cache - ParserCache::singleton()->deleteOptionsKey( $this ); - // Avoid sending HTTP 304s in ViewAction to the client who just issued the purge - $cache = ObjectCache::getLocalClusterInstance(); - $cache->set( - $cache->makeKey( 'page', 'last-dc-purge', $this->getId() ), - wfTimestamp( TS_MW ), - $cache::TTL_HOUR - ); - } + $this->mTitle->invalidateCache(); - if ( ( $flags & self::PURGE_CDN_CACHE ) == self::PURGE_CDN_CACHE ) { - // Clear any HTML file cache - HTMLFileCache::clearFileCache( $this->getTitle() ); - // Send purge after any page_touched above update was committed - DeferredUpdates::addUpdate( - new CdnCacheUpdate( $this->mTitle->getCdnUrls() ), - DeferredUpdates::PRESEND - ); - } + // 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(); @@ -1169,11 +1135,11 @@ class WikiPage implements Page, IDBAccessObject { * * @return string|bool TS_MW timestamp or false * @since 1.28 + * @deprecated since 1.29. It will always return false. */ public function getLastPurgeTimestamp() { - $cache = ObjectCache::getLocalClusterInstance(); - - return $cache->get( $cache->makeKey( 'page', 'last-dc-purge', $this->getId() ) ); + wfDeprecated( __METHOD__, '1.29' ); + return false; } /** @@ -1211,7 +1177,7 @@ class WikiPage implements Page, IDBAccessObject { ); if ( $dbw->affectedRows() > 0 ) { - $newid = $pageId ?: $dbw->insertId(); + $newid = $pageId ? (int)$pageId : $dbw->insertId(); $this->mId = $newid; $this->mTitle->resetArticleID( $newid ); @@ -2935,8 +2901,8 @@ class WikiPage implements Page, IDBAccessObject { $status->value = $logid; // Show log excerpt on 404 pages rather than just a link - $cache = ObjectCache::getMainStashInstance(); - $key = wfMemcKey( 'page-recent-delete', md5( $logTitle->getPrefixedText() ) ); + $cache = MediaWikiServices::getInstance()->getMainObjectStash(); + $key = $cache->makeKey( 'page-recent-delete', md5( $logTitle->getPrefixedText() ) ); $cache->set( $key, 1, $cache::TTL_DAY ); return $status; @@ -3286,6 +3252,9 @@ class WikiPage implements Page, IDBAccessObject { MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title ); + // Invalidate caches of articles which include this page + DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) ); + if ( $title->getNamespace() == NS_CATEGORY ) { // Load the Category object, which will schedule a job to create // the category table row if necessary. Checking a replica DB is ok