From: Brian Wolff Date: Tue, 26 Sep 2017 21:51:31 +0000 (+0000) Subject: Reopen db connection after doing SpecialPageCacheUpdates X-Git-Tag: 1.31.0-rc.0~1944^2 X-Git-Url: http://git.heureux-cyclage.org/?a=commitdiff_plain;h=67f04373d6d4fe5295b0823ac47944e20a649bfd;p=lhc%2Fweb%2Fwiklou.git Reopen db connection after doing SpecialPageCacheUpdates Special page updates on commons have been broken recently due to Mysql "going away" after doing the ActiveUsers special page cache update. Presumably this is because we were only repinging the server after QueryPage updates, and not the callback updates (Combined with a spike in wikidata recentchanges entries making the ActiveUsers callback now take about an hour to complete) Bug: T176055 Change-Id: Ic344940460c353544d7c08bbe2d8c900f6cc73da --- diff --git a/maintenance/updateSpecialPages.php b/maintenance/updateSpecialPages.php index 5ea3828214..cc9f763bc8 100644 --- a/maintenance/updateSpecialPages.php +++ b/maintenance/updateSpecialPages.php @@ -101,16 +101,7 @@ class UpdateSpecialPages extends Maintenance { $this->output( sprintf( "%.2fs\n", $seconds ) ); } # Reopen any connections that have closed - if ( !wfGetLB()->pingAll() ) { - $this->output( "\n" ); - do { - $this->error( "Connection failed, reconnecting in 10 seconds..." ); - sleep( 10 ); - } while ( !wfGetLB()->pingAll() ); - $this->output( "Reconnected\n\n" ); - } - # Wait for the replica DB to catch up - wfWaitForSlaves(); + $this->reopenAndWaitFotReplicas(); } else { $this->output( "cheap, skipped\n" ); } @@ -121,6 +112,25 @@ class UpdateSpecialPages extends Maintenance { } } + /** + * Re-open any closed db connection, and wait for replicas + * + * Queries that take a really long time, might cause the + * mysql connection to "go away" + */ + private function reopenAndWaiFotReplicas() { + if ( !wfGetLB()->pingAll() ) { + $this->output( "\n" ); + do { + $this->error( "Connection failed, reconnecting in 10 seconds..." ); + sleep( 10 ); + } while ( !wfGetLB()->pingAll() ); + $this->output( "Reconnected\n\n" ); + } + # Wait for the replica DB to catch up + wfWaitForSlaves(); + } + public function doSpecialPageCacheUpdates( $dbw ) { global $wgSpecialPageCacheUpdates; @@ -154,7 +164,7 @@ class UpdateSpecialPages extends Maintenance { } $this->output( sprintf( "%.2fs\n", $seconds ) ); # Wait for the replica DB to catch up - wfWaitForSlaves(); + $this->reopenAndWaitForReplicas(); } } }