protected function callMPM()
{
$state = Daemon::getStateOfWorkers($this);
if (isset(Daemon::$config->mpm->value) && is_callable($func = Daemon::$config->mpm->value)) {
$func($this, $state);
}
$upToMinWorkers = Daemon::$config->minworkers->value - $state['alive'];
$upToMaxWorkers = Daemon::$config->maxworkers->value - $state['alive'];
$upToMinSpareWorkers = Daemon::$config->minspareworkers->value - $state['idle'];
if ($upToMinSpareWorkers > $upToMaxWorkers) {
$upToMinSpareWorkers = $upToMaxWorkers;
}
$n = max($upToMinSpareWorkers, $upToMinWorkers);
if ($n > 0) {
//Daemon::log('minspareworkers = '.Daemon::$config->minspareworkers->value);
//Daemon::log('maxworkers = '.Daemon::$config->maxworkers->value);
//Daemon::log('maxspareworkers = '.Daemon::$config->maxspareworkers->value);
//Daemon::log(json_encode($state));
//Daemon::log('upToMinSpareWorkers = ' . $upToMinSpareWorkers . ' upToMinWorkers = ' . $upToMinWorkers);
Daemon::log('Spawning ' . $n . ' worker(s)');
$this->spawnWorkers($n);
return $n;
}
$a = ['default' => 0];
if (Daemon::$config->maxspareworkers->value > 0) {
// if MaxSpareWorkers enabled, we have to stop idle workers, keeping in mind the MinWorkers
$a['downToMaxSpareWorkers'] = min($state['idle'] - Daemon::$config->maxspareworkers->value, $state['alive'] - Daemon::$config->minworkers->value);
}
$a['downToMaxWorkers'] = $state['alive'] - $state['reloading'] - Daemon::$config->maxworkers->value;
$n = max($a);
if ($n > 0) {
//Daemon::log('down = ' . json_encode($a));
//Daemon::log(json_encode($state));
Daemon::log('Stopping ' . $n . ' worker(s)');
$this->stopWorkers($n);
return -$n;
}
return 0;
}