/** * Get the load balancer factory object * * @return LBFactory */ function wfGetLBFactory() { return LBFactory::singleton(); }
} $dbw = wfGetDB(DB_SLAVE); // define socket which listens for a break signal $socket = socket_create_listen("9876"); // port is freely chosen socket_set_nonblock($socket); // max number of threads to be considered to calculate sleeping time define('MAX_THREADS_CONSIDERED', 10); global $wgLoadBalancer; print "-------------------------------------------------\n"; print " Running jobs... ({$rate} jobs/second) \t\t \n"; print "-------------------------------------------------\n"; for (;;) { // determine the most lagged slave // if $lag == -1, there's no slave. list($host, $lag) = LBFactory::singleton()->getMainLB()->getMaxLag(); if ($lag == -1) { // make sleeping time adaptive to database load. $runningThreads = smwfGetNumOfRunningThreads($dbw); $runningThreads = $runningThreads <= MAX_THREADS_CONSIDERED ? $runningThreads : MAX_THREADS_CONSIDERED; // wait depending on user-defined $rate and server load sleep(1 / $rate + $runningThreads); } else { // wait for most lagged slave to be *below* 1/$rate + 3 seconds lag time. wfWaitForSlaves(1 / $rate + 3); } // get next job $job = Job::pop(); // is there a break signal? $accept_sock = @socket_accept($socket); if ($accept_sock !== false) {