From c6f0a73ae04aecd3bb22d12ad34e55ca93f01745 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Sat, 3 Jun 2006 22:20:31 +0000 Subject: [PATCH] In fixSlaveDesync.php, don't check slaves that have zero load. --- includes/LoadBalancer.php | 25 +++++++++++++++++++------ maintenance/fixSlaveDesync.php | 25 ++++++++++++++++--------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/includes/LoadBalancer.php b/includes/LoadBalancer.php index 6cf743b9e3..d77cf3f66a 100644 --- a/includes/LoadBalancer.php +++ b/includes/LoadBalancer.php @@ -484,21 +484,34 @@ class LoadBalancer { wfProfileOut( $fname ); } - function getWriterIndex() - { + function getWriterIndex() { return 0; } - function force( $i ) - { + /** + * Force subsequent calls to getConnection(DB_SLAVE) to return the + * given index. Set to -1 to restore the original load balancing + * behaviour. I thought this was a good idea when I originally + * wrote this class, but it has never been used. + */ + function force( $i ) { $this->mForce = $i; } - function haveIndex( $i ) - { + /** + * Returns true if the specified index is a valid server index + */ + function haveIndex( $i ) { return array_key_exists( $i, $this->mServers ); } + /** + * Returns true if the specified index is valid and has non-zero load + */ + function isNonZeroLoad( $i ) { + return array_key_exists( $i, $this->mServers ) && $this->mLoads[$i] != 0; + } + /** * Get the number of defined servers (not the number of open connections) */ diff --git a/maintenance/fixSlaveDesync.php b/maintenance/fixSlaveDesync.php index 441ca2b986..e97f96c9a8 100644 --- a/maintenance/fixSlaveDesync.php +++ b/maintenance/fixSlaveDesync.php @@ -5,12 +5,17 @@ require_once( 'commandLine.inc' ); //$wgDebugLogFile = '/dev/stdout'; -$numServers = count( $wgDBservers ); +$slaveIndexes = array(); +for ( $i = 1; $i < count( $wgDBservers ); $i++ ) { + if ( $wgLoadBalancer->isNonZeroLoad( $i ) ) { + $slaveIndexes[] = $i; + } +} /* foreach ( $wgLoadBalancer->mServers as $i => $server ) { $wgLoadBalancer->mServers[$i]['flags'] |= DBO_DEBUG; }*/ -define( 'REPORTING_INTERVAL', 1000 ); +$reportingInterval = 1000; if ( isset( $args[0] ) ) { desyncFixPage( $args[0] ); @@ -19,29 +24,31 @@ if ( isset( $args[0] ) ) { $maxPage = $dbw->selectField( 'page', 'MAX(page_id)', false, 'fixDesync.php' ); for ( $i=1; $i <= $maxPage; $i++ ) { desyncFixPage( $i ); - if ( !($i % REPORTING_INTERVAL) ) { + if ( !($i % $reportingInterval) ) { print "$i\n"; } } } function desyncFixPage( $pageID ) { - global $numServers; + global $slaveIndexes; $fname = 'desyncFixPage'; # Check for a corrupted page_latest $dbw =& wfGetDB( DB_MASTER ); $realLatest = $dbw->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), $fname ); - for ( $i = 1; $i < $numServers; $i++ ) { + $found = false; + foreach ( $slaveIndexes as $i ) { $db =& wfGetDB( $i ); $latest = $db->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), $fname ); $max = $db->selectField( 'revision', 'MAX(rev_id)', false, $fname ); if ( $latest != $realLatest && $realLatest < $max ) { print "page_latest corrupted in page $pageID, server $i\n"; + $found = true; break; } } - if ( $i == $numServers ) { + if ( !$found ) { return; } @@ -67,14 +74,14 @@ function desyncFixPage( $pageID ) { print "$rid "; # Revision $row = $dbw->selectRow( 'revision', '*', array( 'rev_id' => $rid ), $fname ); - for ( $i = 1; $i < $numServers; $i++ ) { + foreach ( $slaveIndexes as $i ) { $db =& wfGetDB( $i ); $db->insert( 'revision', get_object_vars( $row ), $fname, 'IGNORE' ); } # Text $row = $dbw->selectRow( 'text', '*', array( 'old_id' => $row->rev_text_id ), $fname ); - for ( $i = 1; $i < $numServers; $i++ ) { + foreach ( $slaveIndexes as $i ) { $db =& wfGetDB( $i ); $db->insert( 'text', get_object_vars( $row ), $fname, 'IGNORE' ); } @@ -83,7 +90,7 @@ function desyncFixPage( $pageID ) { } print "Fixing page_latest... "; - for ( $i = 1; $i < $numServers; $i++ ) { + foreach ( $slaveIndexes as $i ) { $db =& wfGetDB( $i ); $db->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), $fname ); } -- 2.20.1