46 private $wikiPageFactory;
48 private bool $triggerLinksUpdate;
77 bool $triggerLinksUpdate =
false
82 throw new InvalidArgumentException(
'$page parameter mismatches $revision parameter' );
87 $this->workKey = $workKey;
89 $this->parserCache = $parserCache;
90 $this->lbFactory = $lbFactory;
91 $this->chronologyProtector = $chronologyProtector;
92 $this->wikiPageFactory = $wikiPageFactory;
94 $this->triggerLinksUpdate = $triggerLinksUpdate;
106 $output = $status->getValue();
109 if ( $this->cacheable && $output->isCacheable() ) {
110 $this->parserCache->save(
113 $this->parserOptions,
115 $this->revision->getId()
119 if ( $this->triggerLinksUpdate ) {
120 $this->wikiPageFactory->newFromTitle( $this->page )
121 ->triggerOpportunisticLinksUpdate( $output );
132 $parserOutput = $this->parserCache->get( $this->page, $this->parserOptions );
134 $logger = $this->loggerSpi->getLogger(
'PoolWorkArticleView' );
135 $logger->debug( $parserOutput ?
'parser cache hit' :
'parser cache miss' );
137 return $parserOutput ? Status::newGood( $parserOutput ) :
false;
145 $parserOutput = $this->parserCache->getDirty( $this->page, $this->parserOptions );
147 $logger = $this->loggerSpi->getLogger(
'dirty' );
149 if ( !$parserOutput ) {
150 $logger->info(
'dirty missing' );
164 $lastWriteTime = $this->chronologyProtector->getTouched( $this->lbFactory->getMainLB() );
165 $cacheTime = MWTimestamp::convert( TS_UNIX, $parserOutput->getCacheTime() );
166 if ( $lastWriteTime && $cacheTime <= $lastWriteTime ) {
168 'declining to send dirty output since cache time ' .
169 '{cacheTime} is before last write time {lastWriteTime}',
171 'workKey' => $this->workKey,
172 'cacheTime' => $cacheTime,
173 'lastWriteTime' => $lastWriteTime,
183 $logger->info( $fast ?
'fast dirty output' :
'dirty output', [
'workKey' => $this->workKey ] );
185 $status = Status::newGood( $parserOutput );
186 $status->warning(
'view-pool-dirty-output' );
187 $status->warning( $fast ?
'view-pool-contention' :
'view-pool-overload' );
wfTimestampNow()
Convenience function; returns MediaWiki timestamp for the present time.
Service for creating WikiPage objects.
Cache for ParserOutput objects corresponding to the latest page revisions.
Set options of the Parser.
PoolWorkArticleView for the current revision of a page, using ParserCache.
__construct(string $workKey, PageRecord $page, RevisionRecord $revision, ParserOptions $parserOptions, RevisionRenderer $revisionRenderer, ParserCache $parserCache, ILBFactory $lbFactory, ChronologyProtector $chronologyProtector, LoggerSpi $loggerSpi, WikiPageFactory $wikiPageFactory, bool $cacheable=true, bool $triggerLinksUpdate=false)
PoolCounter protected work wrapping RenderedRevision->getRevisionParserOutput.
ParserOptions $parserOptions
getId( $wikiId=self::LOCAL)
Returns the page ID.