$target_len = floor( ($totalq + $total_add) / $num_servers );
foreach($in_q as $sid => $cq) {
- if ( $target_len - $cq < 1) {
+ if ( $cq > $target_len) {
continue;
}
$up[ $sid ] = array_slice($to_add, 0, $target_len - $cq);
}
- foreach($to_add as $i) {
- $up[ $ids[0] ][] = $i;
+
+ // add the reminder evently
+ foreach($to_add as $n=>$i) {
+ $up[ $ids[$n % $num_servers] ][] = $i;
}
// distribution needs to go to ones that have the shortest queues. - so to balance out the queues
$good = $s;
break;
}
+ $offset = ($offset + 1) % count($servers);
+ var_dump($offset);
}
if ($good == false && $allow_same) {
$good = $this;
{
// return current server id..
static $cache = array();
-
- // get the domain..
+ // get the domain..
$ea = explode('@',$email);
$dom = strtolower(array_pop($ea));
- if (isset($cache[$dom])) {
- return $cache[$dom];
+ if (isset( $cache[$this->id . '-'. $dom])) {
+ return $cache[$this->id . '-'. $dom];
}
$cd = DB_DataObject::factory('core_domain')->loadOrCreate($dom);
$bl->server_id = $this->id;
$bl->domain_id = $cd->id;
if ($bl->count()) {
- $cache[$dom] = true;
+ $cache[$this->id . '-'. $dom] = true;
return true;
}