1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-25 16:22:43 +01:00

Launch daemons with a full Phabricator environment in the overseers

Summary:
Ref T1670. Prepare for the overseers to talk directly to the database instead of using Conduit. See T1670 for discussion.

This shouldn't impact anything, except it has a very small chance of destabilizing the overseers.

Test Plan:
Ran `phd launch`, `phd debug`, `phd start`.

Ran with `--trace-memory` and verified elevated but mostly steady memory usage (8MB / overseer). This climbed by 0.05KB / sec (4MB / day) but the source of the leaks seems to be the cURL calls we're making over Conduit so this will actually fix that. Disabling `--conduit-uri` reported steady memory usage. I wasn't able to identify anything leaking within code we control. This may be something like a dynamic but capped buffer in cURL, since we haven't seen any issues in the wild.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T1670

Differential Revision: https://secure.phabricator.com/D6534
This commit is contained in:
epriestley 2013-07-23 12:09:45 -07:00
parent 974997f6bc
commit 9e0a299b06
5 changed files with 33 additions and 17 deletions

View file

@ -1 +1 @@
../scripts/daemon/phabricator_daemon_launcher.php ../scripts/daemon/manage_daemons.php

View file

@ -0,0 +1,27 @@
#!/usr/bin/env php
<?php
// NOTE: This is substantially the same as the libphutil/ "launch_daemon.php"
// script, except it loads the Phabricator environment and adds some Phabricator
// specific flags.
$root = dirname(dirname(dirname(__FILE__)));
require_once $root.'/scripts/__init_script__.php';
$flags = array();
$bootloader = PhutilBootloader::getInstance();
foreach ($bootloader->getAllLibraries() as $library) {
if ($library == 'phutil') {
// No need to load libphutil, it's necessarily loaded implicitly by the
// daemon itself.
continue;
}
$flags[] = '--load-phutil-library='.phutil_get_library_root($library);
}
// Add more flags.
array_splice($argv, 2, 0, $flags);
$overseer = new PhutilDaemonOverseer($argv);
$overseer->run();

1
scripts/daemon/phd-daemon Symbolic link
View file

@ -0,0 +1 @@
launch_daemon.php

View file

@ -131,18 +131,6 @@ abstract class PhabricatorDaemonManagementWorkflow
$flags[] = '--daemonize'; $flags[] = '--daemonize';
} }
$bootloader = PhutilBootloader::getInstance();
foreach ($bootloader->getAllLibraries() as $library) {
if ($library == 'phutil') {
// No need to load libphutil, it's necessarily loaded implicitly by the
// daemon itself.
continue;
}
$flags[] = csprintf(
'--load-phutil-library=%s',
phutil_get_library_root($library));
}
$flags[] = csprintf('--conduit-uri=%s', PhabricatorEnv::getURI('/api/')); $flags[] = csprintf('--conduit-uri=%s', PhabricatorEnv::getURI('/api/'));
if (!$debug) { if (!$debug) {
@ -160,13 +148,13 @@ abstract class PhabricatorDaemonManagementWorkflow
$flags[] = csprintf('--phd=%s', $pid_dir); $flags[] = csprintf('--phd=%s', $pid_dir);
$command = csprintf( $command = csprintf(
'./launch_daemon.php %s %C %C', './phd-daemon %s %C %C',
$daemon, $daemon,
implode(' ', $flags), implode(' ', $flags),
implode(' ', $argv)); implode(' ', $argv));
$libphutil_root = dirname(phutil_get_library_root('phutil')); $phabricator_root = dirname(phutil_get_library_root('phabricator'));
$daemon_script_dir = $libphutil_root.'/scripts/daemon/'; $daemon_script_dir = $phabricator_root.'/scripts/daemon/';
if ($debug) { if ($debug) {
// Don't terminate when the user sends ^C; it will be sent to the // Don't terminate when the user sends ^C; it will be sent to the
@ -175,7 +163,7 @@ abstract class PhabricatorDaemonManagementWorkflow
SIGINT, SIGINT,
array(__CLASS__, 'ignoreSignal')); array(__CLASS__, 'ignoreSignal'));
echo "\n libphutil/scripts/daemon/ \$ {$command}\n\n"; echo "\n phabricator/scripts/daemon/ \$ {$command}\n\n";
phutil_passthru('(cd %s && exec %C)', $daemon_script_dir, $command); phutil_passthru('(cd %s && exec %C)', $daemon_script_dir, $command);
} else { } else {