}
/**
- * @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 ) );
}
/**
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;
}
}
$casToken = null;
+ /** @var ParserOutput $value */
$value = $this->mMemc->get( $parserOutputKey, $casToken, BagOStuff::READ_VERIFIED );
if ( !$value ) {
wfDebug( "ParserOutput cache miss.\n" );
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;
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;
*/
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();
'ParserCacheSaveComplete',
[ $this, $parserOutput, $page->getTitle(), $popts, $revId ]
);
- } else {
+ } elseif ( $expire <= 0 ) {
wfDebug( "Parser output was marked as uncacheable and has not been saved.\n" );
}
}