Make refreshLinksJob explicitly check the cache rev ID
authorAaron Schulz <aschulz@wikimedia.org>
Tue, 26 Apr 2016 19:43:51 +0000 (12:43 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Mon, 2 May 2016 19:10:38 +0000 (12:10 -0700)
This is needed if the $useOutdated behavior of ParserCache
is modified per Ibd111bed203dd.

Bug: T133659
Change-Id: I70806dffba8af255d7cdad7663132b58479f63e3

includes/jobqueue/jobs/RefreshLinksJob.php

index 15ee980..927cafd 100644 (file)
@@ -185,17 +185,21 @@ class RefreshLinksJob extends Job {
                        }
 
                        if ( $page->getTouched() >= $skewedTimestamp || $opportunistic ) {
-                               // Something bumped page_touched since this job was made
-                               // or the cache is otherwise suspected to be up-to-date
+                               // Something bumped page_touched since this job was made or the cache is
+                               // otherwise suspected to be up-to-date. As long as the cache rev ID matches
+                               // and it reflects the job's triggering change, then it is usable.
                                $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
-                               if ( $parserOutput && $parserOutput->getCacheTime() < $skewedTimestamp ) {
+                               if ( !$parserOutput
+                                       || $parserOutput->getCacheRevisionId() != $revision->getId()
+                                       || $parserOutput->getCacheTime() < $skewedTimestamp
+                               ) {
                                        $parserOutput = false; // too stale
                                }
                        }
                }
 
                // Fetch the current revision and parse it if necessary...
-               if ( $parserOutput == false ) {
+               if ( !$parserOutput ) {
                        $start = microtime( true );
                        // Revision ID must be passed to the parser output to get revision variables correct
                        $parserOutput = $content->getParserOutput(