23use InvalidArgumentException;
52 private $wikiPageFactory;
54 private bool $triggerLinksUpdate;
83 bool $triggerLinksUpdate =
false
88 throw new InvalidArgumentException(
'$page parameter mismatches $revision parameter' );
93 $this->workKey = $workKey;
95 $this->parserCache = $parserCache;
96 $this->lbFactory = $lbFactory;
97 $this->chronologyProtector = $chronologyProtector;
98 $this->wikiPageFactory = $wikiPageFactory;
100 $this->triggerLinksUpdate = $triggerLinksUpdate;
109 $output = $status->getValue();
112 if ( $this->cacheable && $output->isCacheable() ) {
113 $this->parserCache->save(
120 if ( $this->triggerLinksUpdate ) {
121 $this->wikiPageFactory->newFromTitle( $this->page )->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' );
194class_alias( PoolWorkArticleViewCurrent::class,
'PoolWorkArticleViewCurrent' );
Service for creating WikiPage objects.
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.
renderRevision()
Render the given revision.
ParserOptions $parserOptions
Cache for ParserOutput objects corresponding to the latest page revisions.
Set options of the Parser.
getId( $wikiId=self::LOCAL)
Returns the page ID.