Merge "Move around "ا" to after "آ" and not before"
[lhc/web/wiklou.git] / includes / jobqueue / jobs / RefreshLinksJob.php
index 64d955a..9f3550f 100644 (file)
@@ -39,9 +39,9 @@ use Wikimedia\Rdbms\DBReplicationWaitError;
 class RefreshLinksJob extends Job {
        /** @var float Cache parser output when it takes this long to render */
        const PARSE_THRESHOLD_SEC = 1.0;
-       /** @var integer Lag safety margin when comparing root job times to last-refresh times */
+       /** @var int Lag safety margin when comparing root job times to last-refresh times */
        const CLOCK_FUDGE = 10;
-       /** @var integer How many seconds to wait for replica DBs to catch up */
+       /** @var int How many seconds to wait for replica DBs to catch up */
        const LAG_WAIT_TIMEOUT = 15;
 
        function __construct( Title $title, array $params ) {
@@ -87,7 +87,7 @@ class RefreshLinksJob extends Job {
                        // When the base job branches, wait for the replica DBs to catch up to the master.
                        // From then on, we know that any template changes at the time the base job was
                        // enqueued will be reflected in backlink page parses when the leaf jobs run.
-                       if ( !isset( $params['range'] ) ) {
+                       if ( !isset( $this->params['range'] ) ) {
                                try {
                                        $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
                                        $lbFactory->waitForReplication( [
@@ -113,7 +113,7 @@ class RefreshLinksJob extends Job {
                        JobQueueGroup::singleton()->push( $jobs );
                // Job to update link tables for a set of titles
                } elseif ( isset( $this->params['pages'] ) ) {
-                       foreach ( $this->params['pages'] as $pageId => $nsAndKey ) {
+                       foreach ( $this->params['pages'] as $nsAndKey ) {
                                list( $ns, $dbKey ) = $nsAndKey;
                                $this->runForTitle( Title::makeTitleSafe( $ns, $dbKey ) );
                        }
@@ -253,7 +253,7 @@ class RefreshLinksJob extends Job {
                // This avoids snapshot-clearing errors in LinksUpdate::acquirePageLock().
                $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
 
-               foreach ( $updates as $key => $update ) {
+               foreach ( $updates as $update ) {
                        // FIXME: This code probably shouldn't be here?
                        // Needed by things like Echo notifications which need
                        // to know which user caused the links update
@@ -279,6 +279,10 @@ class RefreshLinksJob extends Job {
 
                InfoAction::invalidateCache( $title );
 
+               // Commit any writes here in case this method is called in a loop.
+               // In that case, the scoped lock will fail to be acquired.
+               $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
+
                return true;
        }
 
@@ -297,6 +301,12 @@ class RefreshLinksJob extends Job {
        }
 
        public function workItemCount() {
-               return isset( $this->params['pages'] ) ? count( $this->params['pages'] ) : 1;
+               if ( !empty( $this->params['recursive'] ) ) {
+                       return 0; // nothing actually refreshed
+               } elseif ( isset( $this->params['pages'] ) ) {
+                       return count( $this->params['pages'] );
+               }
+
+               return 1; // one title
        }
 }