From: Tim Starling Date: Mon, 26 Feb 2007 00:19:17 +0000 (+0000) Subject: Proposed new method which will work with split master. Committing for test on server. X-Git-Tag: 1.31.0-rc.0~53960 X-Git-Url: http://git.cyclocoop.org/%24action?a=commitdiff_plain;h=15d7ca5ab52760655bcfd99d2f78c87b09caa7d9;p=lhc%2Fweb%2Fwiklou.git Proposed new method which will work with split Committing for test on server. --- diff --git a/maintenance/nextJobDB.php b/maintenance/nextJobDB.php index f67b0266a3..7aa05a27f5 100644 --- a/maintenance/nextJobDB.php +++ b/maintenance/nextJobDB.php @@ -1,65 +1,48 @@ get( 'jobqueue:dbs' ); +if ( !$pendingDBs ) { + $pendingDBs = array(); + # Cross-reference DBs by master DB server + $dbsByMaster = array(); + $defaultMaster = $wgAlternateMaster['DEFAULT']; + foreach ( $wgLocalDatabases as $db ) { + if ( isset( $wgAlternateMaster[$db] ) ) { + $dbsByMaster[$wgAlternateMaster[$db]][] = $db; + } else { + $dbsByMaster[$defaultMaster][] = $db; + } } - $sql .= "(SELECT '$db' FROM `$db`.job)"; -} -$sql .= ' LIMIT 1,1'; -( $res = mysql_query( $sql ) ) || myerror(); -$row = mysql_fetch_row( $res ); -if ( $row ) { - $db = $row[0]; -} else { - $db = false; -} - -mysql_free_result( $res ); -mysql_close(); + foreach ( $dbsByMaster as $master => $dbs ) { + $dbConn = new Database( $master, $wgDBuser, $wgDBpassword ); -if ( $enwikiHasJobs ) { - if ( $db ) { - # Choose enwiki with arbitrary constant probability - if ( mt_rand( 0, 4 ) == 0 ) { - $db = 'enwiki'; + # Padding row for MySQL bug + $sql = "(SELECT '-------------------------------------------')"; + foreach ( $dbs as $dbName ) { + if ( $sql != '' ) { + $sql .= ' UNION '; + } + $sql .= "(SELECT '$dbName' FROM `$dbName`.job LIMIT 1)"; + } + $res = $dbConn->query( $sql, 'nextJobDB.php' ); + $row = $dbConn->fetchRow( $res ); // discard padding row + while ( $row = $dbConn->fetchRow( $res ) ) { + $pendingDBs[] = $row[0]; } - } else { - $db = 'enwiki'; } -} -if ( $db ) { - echo $db; + $wgMemc->set( 'jobqueue:dbs', $pendingDBs, 300 ); } -function myerror() { - $f = fopen( 'php://stderr', 'w' ); - fwrite( $f, mysql_error() . "\n" ); - exit(1); +if ( $pendingDBs ) { + echo $pendingDBs[mt_rand(0, count( $pendingDBs ) - 1)]; } + ?>