From 15d7ca5ab52760655bcfd99d2f78c87b09caa7d9 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Mon, 26 Feb 2007 00:19:17 +0000 Subject: [PATCH] Proposed new method which will work with split master. Committing for test on server. --- maintenance/nextJobDB.php | 89 ++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 53 deletions(-) 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)]; } + ?> -- 2.20.1