<?php
-
-/*
+/**
* Pick a database that has pending jobs
+ *
+ * @file
+ * @ingroup Maintenance
*/
$options = array( 'type' );
? $options['type']
: false;
-$pendingDBs = $wgMemc->get( 'jobqueue:dbs' );
+$mckey = $type === false
+ ? "jobqueue:dbs"
+ : "jobqueue:dbs:$type";
+
+$pendingDBs = $wgMemc->get( $mckey );
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;
- }
+ $lb = wfGetLB( $db );
+ $dbsByMaster[$lb->getServerName(0)][] = $db;
}
foreach ( $dbsByMaster as $master => $dbs ) {
- $dbConn = new Database( $master, $wgDBuser, $wgDBpassword );
+ $dbConn = wfGetDB( DB_MASTER, array(), $dbs[0] );
$stype = $dbConn->addQuotes($type);
# Padding row for MySQL bug
if ($type === false)
$sql .= "(SELECT '$dbName' FROM `$dbName`.job LIMIT 1)";
else
- $sql .= "(SELECT '$dbName' FROM `$dbName`.job WHERE job_cmd='$stype' LIMIT 1)";
+ $sql .= "(SELECT '$dbName' FROM `$dbName`.job WHERE job_cmd=$stype LIMIT 1)";
}
$res = $dbConn->query( $sql, 'nextJobDB.php' );
$row = $dbConn->fetchRow( $res ); // discard padding row
}
}
- $wgMemc->set( 'jobqueue:dbs', $pendingDBs, 300 );
+ $wgMemc->set( $mckey, $pendingDBs, 300 );
}
if ( $pendingDBs ) {
echo $pendingDBs[mt_rand(0, count( $pendingDBs ) - 1)];
}
-?>
+