refreshLinks.php: Fix deletion of link entries from nonexistent pages
authorKevin Israel <pleasestand@live.com>
Fri, 31 Jul 2015 22:16:24 +0000 (18:16 -0400)
committerKevin Israel <pleasestand@live.com>
Fri, 31 Jul 2015 22:16:24 +0000 (18:16 -0400)
After checking a chunk of one of the links tables, the script failed
to restore the original chunk start when checking the next table.

Follows-up a1e005155921.

Bug: T107632
Change-Id: I21678bc3c83946f2e62afe3fdc69c7e84678ceeb

maintenance/refreshLinks.php

index 5d311ad..f6c721f 100644 (file)
@@ -327,13 +327,14 @@ class RefreshLinks extends Maintenance {
 
                foreach ( $linksTables as $table => $field ) {
                        $this->output( "    $table: 0" );
+                       $tableStart = $start;
                        $counter = 0;
                        do {
                                $ids = $dbr->selectFieldValues(
                                        $table,
                                        $field,
                                        array(
-                                               self::intervalCond( $dbr, $field, $start, $end ),
+                                               self::intervalCond( $dbr, $field, $tableStart, $end ),
                                                "$field NOT IN ({$dbr->selectSQLText( 'page', 'page_id' )})",
                                        ),
                                        __METHOD__,
@@ -346,10 +347,10 @@ class RefreshLinks extends Maintenance {
                                        wfWaitForSlaves();
                                        $dbw->delete( $table, array( $field => $ids ), __METHOD__ );
                                        $this->output( ", $counter" );
-                                       $start = $ids[$numIds - 1] + 1;
+                                       $tableStart = $ids[$numIds - 1] + 1;
                                }
 
-                       } while ( $numIds >= $batchSize && ( $end === null || $start <= $end ) );
+                       } while ( $numIds >= $batchSize && ( $end === null || $tableStart <= $end ) );
 
                        $this->output( " deleted.\n" );