mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-20 12:30:56 +01:00
Start all daemons under a single overseer
Summary: Ref T7352. This moves all the daemons under one overseer. The primary goal is to reduce the minimum footprint of an instance in the Phacility cluster, by reducing the number of processes each instance needs to run on daemon-tier hosts. This improves scalability by roughly a factor of 2. Test Plan: - Ran `phd debug`, `phd launch, `phd start`. Saw normal behavior, with only one total overseer. - Fataled dameons and saw the overseer restar them normally. - Used `phd status` and `phd stop` and got reasonable results (`phd status` is still a touch off). Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T7352 Differential Revision: https://secure.phabricator.com/D11857
This commit is contained in:
parent
c2d66f29cd
commit
f0f2b2cbeb
3 changed files with 53 additions and 60 deletions
|
@ -39,9 +39,10 @@ final class PhabricatorDaemonManagementDebugWorkflow
|
|||
}
|
||||
|
||||
$daemon_class = array_shift($argv);
|
||||
return $this->launchDaemon(
|
||||
$daemon_class,
|
||||
$argv,
|
||||
return $this->launchDaemons(
|
||||
array(
|
||||
array($daemon_class, $argv),
|
||||
),
|
||||
$is_debug = true,
|
||||
$run_as_current_user);
|
||||
}
|
||||
|
|
|
@ -43,13 +43,10 @@ final class PhabricatorDaemonManagementLaunchWorkflow
|
|||
pht('You must specify which daemon to launch.'));
|
||||
}
|
||||
|
||||
$daemon_class = array_shift($argv);
|
||||
$daemon = array(array_shift($argv), $argv);
|
||||
$daemons = array_fill(0, $daemon_count, $daemon);
|
||||
|
||||
$this->willLaunchDaemons();
|
||||
|
||||
for ($ii = 0; $ii < $daemon_count; $ii++) {
|
||||
$this->launchDaemon($daemon_class, $argv, $is_debug = false);
|
||||
}
|
||||
$this->launchDaemons($daemons, $is_debug = false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -105,13 +105,18 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
return head($match);
|
||||
}
|
||||
|
||||
protected final function launchDaemon(
|
||||
$class,
|
||||
array $argv,
|
||||
protected final function launchDaemons(
|
||||
array $daemons,
|
||||
$debug,
|
||||
$run_as_current_user = false) {
|
||||
|
||||
$daemon = $this->findDaemonClass($class);
|
||||
// Convert any shorthand classnames like "taskmaster" into proper class
|
||||
// names.
|
||||
foreach ($daemons as $key => $daemon) {
|
||||
$class = $this->findDaemonClass($daemon[0]);
|
||||
$daemons[$key][0] = $class;
|
||||
}
|
||||
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
||||
if (!$run_as_current_user) {
|
||||
|
@ -136,34 +141,7 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
}
|
||||
}
|
||||
|
||||
if ($debug) {
|
||||
if ($argv) {
|
||||
$console->writeOut(
|
||||
pht(
|
||||
"Launching daemon \"%s\" in debug mode (not daemonized) ".
|
||||
"with arguments %s.\n",
|
||||
$daemon,
|
||||
csprintf('%LR', $argv)));
|
||||
} else {
|
||||
$console->writeOut(
|
||||
pht(
|
||||
"Launching daemon \"%s\" in debug mode (not daemonized).\n",
|
||||
$daemon));
|
||||
}
|
||||
} else {
|
||||
if ($argv) {
|
||||
$console->writeOut(
|
||||
pht(
|
||||
"Launching daemon \"%s\" with arguments %s.\n",
|
||||
$daemon,
|
||||
csprintf('%LR', $argv)));
|
||||
} else {
|
||||
$console->writeOut(
|
||||
pht(
|
||||
"Launching daemon \"%s\".\n",
|
||||
$daemon));
|
||||
}
|
||||
}
|
||||
$this->printLaunchingDaemons($daemons, $debug);
|
||||
|
||||
$flags = array();
|
||||
if ($debug || PhabricatorEnv::getEnvConfig('phd.trace')) {
|
||||
|
@ -174,6 +152,12 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
$flags[] = '--verbose';
|
||||
}
|
||||
|
||||
$instance = PhabricatorEnv::getEnvConfig('cluster.instance');
|
||||
if ($instance) {
|
||||
$flags[] = '-l';
|
||||
$flags[] = $instance;
|
||||
}
|
||||
|
||||
$config = array();
|
||||
|
||||
if (!$debug) {
|
||||
|
@ -193,12 +177,14 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
|
||||
$config['piddir'] = $pid_dir;
|
||||
|
||||
$config['daemons'] = array(
|
||||
array(
|
||||
'class' => $daemon,
|
||||
$config['daemons'] = array();
|
||||
foreach ($daemons as $daemon) {
|
||||
list($class, $argv) = $daemon;
|
||||
$config['daemons'][] = array(
|
||||
'class' => $class,
|
||||
'argv' => $argv,
|
||||
),
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
$command = csprintf('./phd-daemon %Ls', $flags);
|
||||
|
||||
|
@ -304,14 +290,6 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
}
|
||||
}
|
||||
|
||||
protected final function willLaunchDaemons() {
|
||||
$console = PhutilConsole::getConsole();
|
||||
$console->writeErr(pht('Preparing to launch daemons.')."\n");
|
||||
|
||||
$log_dir = $this->getLogDirectory().'/daemons.log';
|
||||
$console->writeErr(pht("NOTE: Logs will appear in '%s'.", $log_dir)."\n\n");
|
||||
}
|
||||
|
||||
|
||||
/* -( Commands )----------------------------------------------------------- */
|
||||
|
||||
|
@ -359,12 +337,7 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
$daemons[] = array('PhabricatorTaskmasterDaemon', array());
|
||||
}
|
||||
|
||||
$this->willLaunchDaemons();
|
||||
|
||||
foreach ($daemons as $spec) {
|
||||
list($name, $argv) = $spec;
|
||||
$this->launchDaemon($name, $argv, $is_debug = false);
|
||||
}
|
||||
$this->launchDaemons($daemons, $is_debug = false);
|
||||
|
||||
$console->writeErr(pht('Done.')."\n");
|
||||
return 0;
|
||||
|
@ -579,4 +552,26 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
return $conn_w->getAffectedRows();
|
||||
}
|
||||
|
||||
|
||||
private function printLaunchingDaemons(array $daemons, $debug) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
||||
if ($debug) {
|
||||
$console->writeOut(pht('Launching daemons (in debug mode):'));
|
||||
} else {
|
||||
$console->writeOut(pht('Launching daemons:'));
|
||||
}
|
||||
|
||||
$log_dir = $this->getLogDirectory().'/daemons.log';
|
||||
$console->writeOut(
|
||||
"\n%s\n\n",
|
||||
pht('(Logs will appear in "%s".)', $log_dir));
|
||||
|
||||
foreach ($daemons as $daemon) {
|
||||
list($class, $argv) = $daemon;
|
||||
$console->writeOut(" %s %s\n", $class, implode(' ', $argv));
|
||||
}
|
||||
$console->writeOut("\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue