mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 06:42:42 +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:
parent
974997f6bc
commit
9e0a299b06
5 changed files with 33 additions and 17 deletions
2
bin/phd
2
bin/phd
|
@ -1 +1 @@
|
||||||
../scripts/daemon/phabricator_daemon_launcher.php
|
../scripts/daemon/manage_daemons.php
|
27
scripts/daemon/launch_daemon.php
Executable file
27
scripts/daemon/launch_daemon.php
Executable 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
1
scripts/daemon/phd-daemon
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
launch_daemon.php
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue