X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fparser%2FParserCache.php;h=9e9654097595c63b92f62bb7249498a71cdb27ab;hb=768b2de54f5c51c7b518891421db6708721fa525;hp=916cfc26a1225dbe6228fdb4ee1a7ac77e8a1e60;hpb=91d40b872f960d2b53a4d9dd2a8b77f953f6ff41;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/parser/ParserCache.php b/includes/parser/ParserCache.php index 916cfc26a1..9e96540975 100644 --- a/includes/parser/ParserCache.php +++ b/includes/parser/ParserCache.php @@ -72,12 +72,19 @@ class ParserCache { } /** - * @param WikiPage $article + * @param WikiPage $page * @return mixed|string */ - protected function getOptionsKey( $article ) { - $pageid = $article->getId(); - return wfMemcKey( 'pcache', 'idoptions', "{$pageid}" ); + protected function getOptionsKey( $page ) { + return wfMemcKey( 'pcache', 'idoptions', $page->getId() ); + } + + /** + * @param WikiPage $page + * @since 1.28 + */ + public function deleteOptionsKey( $page ) { + $this->mMemc->delete( $this->getOptionsKey( $page ) ); } /** @@ -146,14 +153,17 @@ class ParserCache { if ( !$useOutdated && $optionsKey->expired( $article->getTouched() ) ) { wfIncrStats( "pcache.miss.expired" ); $cacheTime = $optionsKey->getCacheTime(); - wfDebug( "Parser options key expired, touched " . $article->getTouched() + wfDebugLog( "ParserCache", + "Parser options key expired, touched " . $article->getTouched() . ", epoch $wgCacheEpoch, cached $cacheTime\n" ); return false; - } elseif ( $optionsKey->isDifferentRevision( $article->getLatest() ) ) { + } elseif ( !$useOutdated && $optionsKey->isDifferentRevision( $article->getLatest() ) ) { wfIncrStats( "pcache.miss.revid" ); $revId = $article->getLatest(); $cachedRevId = $optionsKey->getCacheRevisionId(); - wfDebug( "ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n" ); + wfDebugLog( "ParserCache", + "ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n" + ); return false; } @@ -201,6 +211,7 @@ class ParserCache { } $casToken = null; + /** @var ParserOutput $value */ $value = $this->mMemc->get( $parserOutputKey, $casToken, BagOStuff::READ_VERIFIED ); if ( !$value ) { wfDebug( "ParserOutput cache miss.\n" ); @@ -222,14 +233,15 @@ class ParserCache { if ( !$useOutdated && $value->expired( $touched ) ) { wfIncrStats( "pcache.miss.expired" ); $cacheTime = $value->getCacheTime(); - wfDebug( "ParserOutput key expired, touched $touched, " + wfDebugLog( "ParserCache", + "ParserOutput key expired, touched $touched, " . "epoch $wgCacheEpoch, cached $cacheTime\n" ); $value = false; - } elseif ( $value->isDifferentRevision( $article->getLatest() ) ) { + } elseif ( !$useOutdated && $value->isDifferentRevision( $article->getLatest() ) ) { wfIncrStats( "pcache.miss.revid" ); $revId = $article->getLatest(); $cachedRevId = $value->getCacheRevisionId(); - wfDebug( + wfDebugLog( "ParserCache", "ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n" ); $value = false; @@ -237,7 +249,7 @@ class ParserCache { Hooks::run( 'RejectParserCacheValue', [ $value, $wikiPage, $popts ] ) === false ) { wfIncrStats( 'pcache.miss.rejected' ); - wfDebug( + wfDebugLog( "ParserCache", "ParserOutput key valid, but rejected by RejectParserCacheValue hook handler.\n" ); $value = false; @@ -257,7 +269,7 @@ class ParserCache { */ public function save( $parserOutput, $page, $popts, $cacheTime = null, $revId = null ) { $expire = $parserOutput->getCacheExpiry(); - if ( $expire > 0 ) { + if ( $expire > 0 && !$this->mMemc instanceof EmptyBagOStuff ) { $cacheTime = $cacheTime ?: wfTimestampNow(); if ( !$revId ) { $revision = $page->getRevision(); @@ -297,7 +309,7 @@ class ParserCache { 'ParserCacheSaveComplete', [ $this, $parserOutput, $page->getTitle(), $popts, $revId ] ); - } else { + } elseif ( $expire <= 0 ) { wfDebug( "Parser output was marked as uncacheable and has not been saved.\n" ); } }