mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 06:20:56 +01:00
Add phd reload
to send SIGHUP to overseers
Summary: Ref T7384. This just sends SIGHUP to specified overseers in a nice package. Test Plan: See D11898. Reviewers: hach-que, btrahan Reviewed By: btrahan Subscribers: joshuaspence, epriestley Maniphest Tasks: T7384 Differential Revision: https://secure.phabricator.com/D11899
This commit is contained in:
parent
4ccd653cc7
commit
e27c1a4868
4 changed files with 97 additions and 33 deletions
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
return array(
|
||||
'names' => array(
|
||||
'core.pkg.css' => '44623ac2',
|
||||
'core.pkg.css' => '4e2c8d53',
|
||||
'core.pkg.js' => '23d653bb',
|
||||
'darkconsole.pkg.js' => '8ab24e01',
|
||||
'differential.pkg.css' => '14f0fa92',
|
||||
|
@ -38,14 +38,13 @@ return array(
|
|||
'rsrc/css/application/base/main-menu-view.css' => 'f9f5cd1b',
|
||||
'rsrc/css/application/base/notification-menu.css' => '6aa0a74b',
|
||||
'rsrc/css/application/base/phabricator-application-launch-view.css' => '16ca323f',
|
||||
'rsrc/css/application/base/standard-page-view.css' => 'df338a4b',
|
||||
'rsrc/css/application/base/standard-page-view.css' => '60d0df9a',
|
||||
'rsrc/css/application/chatlog/chatlog.css' => '852140ff',
|
||||
'rsrc/css/application/config/config-options.css' => '7fedf08b',
|
||||
'rsrc/css/application/config/config-template.css' => '8e6c6fcd',
|
||||
'rsrc/css/application/config/config-welcome.css' => 'b0d16200',
|
||||
'rsrc/css/application/config/setup-issue.css' => '22270af2',
|
||||
'rsrc/css/application/config/unhandled-exception.css' => '37d4f9a2',
|
||||
'rsrc/css/application/conpherence/durable-column.css' => '12846d25',
|
||||
'rsrc/css/application/conpherence/menu.css' => '73774137',
|
||||
'rsrc/css/application/conpherence/message-pane.css' => '17a9517f',
|
||||
'rsrc/css/application/conpherence/notification.css' => '04a6e10a',
|
||||
|
@ -78,7 +77,7 @@ return array(
|
|||
'rsrc/css/application/maniphest/task-summary.css' => 'ab2fc691',
|
||||
'rsrc/css/application/objectselector/object-selector.css' => '029a133d',
|
||||
'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b',
|
||||
'rsrc/css/application/paste/paste.css' => 'eb997ddd',
|
||||
'rsrc/css/application/paste/paste.css' => 'aa1767d1',
|
||||
'rsrc/css/application/people/people-profile.css' => '25970776',
|
||||
'rsrc/css/application/phame/phame.css' => 'db5682e3',
|
||||
'rsrc/css/application/pholio/pholio-edit.css' => '3ad9d1ee',
|
||||
|
@ -87,7 +86,7 @@ return array(
|
|||
'rsrc/css/application/phortune/phortune-credit-card-form.css' => 'b25b4beb',
|
||||
'rsrc/css/application/phortune/phortune.css' => '9149f103',
|
||||
'rsrc/css/application/phrequent/phrequent.css' => 'ffc185ad',
|
||||
'rsrc/css/application/phriction/phriction-document-css.css' => '0d16bc9a',
|
||||
'rsrc/css/application/phriction/phriction-document-css.css' => '7d7f0071',
|
||||
'rsrc/css/application/policy/policy-edit.css' => '815c66f7',
|
||||
'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43',
|
||||
'rsrc/css/application/policy/policy.css' => '957ea14c',
|
||||
|
@ -116,7 +115,7 @@ return array(
|
|||
'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82',
|
||||
'rsrc/css/layout/phabricator-hovercard-view.css' => '893f4783',
|
||||
'rsrc/css/layout/phabricator-side-menu-view.css' => '7e8c6341',
|
||||
'rsrc/css/layout/phabricator-source-code-view.css' => '2ceee894',
|
||||
'rsrc/css/layout/phabricator-source-code-view.css' => '7d346aa4',
|
||||
'rsrc/css/phui/calendar/phui-calendar-day.css' => 'de035c8a',
|
||||
'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1d0ca59',
|
||||
'rsrc/css/phui/calendar/phui-calendar-month.css' => 'a92e47d2',
|
||||
|
@ -516,7 +515,6 @@ return array(
|
|||
'changeset-view-manager' => '5eb5b98c',
|
||||
'config-options-css' => '7fedf08b',
|
||||
'config-welcome-css' => 'b0d16200',
|
||||
'conpherence-durable-column-view' => '12846d25',
|
||||
'conpherence-menu-css' => '73774137',
|
||||
'conpherence-message-pane-css' => '17a9517f',
|
||||
'conpherence-notification-css' => '04a6e10a',
|
||||
|
@ -709,7 +707,7 @@ return array(
|
|||
'multirow-row-manager' => 'b5d57730',
|
||||
'owners-path-editor' => 'aa1733d0',
|
||||
'owners-path-editor-css' => '2f00933b',
|
||||
'paste-css' => 'eb997ddd',
|
||||
'paste-css' => 'aa1767d1',
|
||||
'path-typeahead' => 'f7fc67ec',
|
||||
'people-profile-css' => '25970776',
|
||||
'phabricator-action-list-view-css' => '9ee9910a',
|
||||
|
@ -745,8 +743,8 @@ return array(
|
|||
'phabricator-shaped-request' => '7cbe244b',
|
||||
'phabricator-side-menu-view-css' => '7e8c6341',
|
||||
'phabricator-slowvote-css' => '266df6a1',
|
||||
'phabricator-source-code-view-css' => '2ceee894',
|
||||
'phabricator-standard-page-view' => 'df338a4b',
|
||||
'phabricator-source-code-view-css' => '7d346aa4',
|
||||
'phabricator-standard-page-view' => '60d0df9a',
|
||||
'phabricator-textareautils' => '5c93c52c',
|
||||
'phabricator-title' => '5c1c758c',
|
||||
'phabricator-tooltip' => '1d298e3a',
|
||||
|
@ -771,7 +769,7 @@ return array(
|
|||
'phortune-credit-card-form-css' => 'b25b4beb',
|
||||
'phortune-css' => '9149f103',
|
||||
'phrequent-css' => 'ffc185ad',
|
||||
'phriction-document-css' => '0d16bc9a',
|
||||
'phriction-document-css' => '7d7f0071',
|
||||
'phui-action-header-view-css' => '89c497e7',
|
||||
'phui-action-panel-css' => '3ee9afd5',
|
||||
'phui-box-css' => '7b3a2eed',
|
||||
|
|
|
@ -1614,6 +1614,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php',
|
||||
'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php',
|
||||
'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php',
|
||||
'PhabricatorDaemonManagementReloadWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php',
|
||||
'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php',
|
||||
'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php',
|
||||
'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php',
|
||||
|
@ -4877,6 +4878,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
'PhabricatorDaemonManagementReloadWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDaemonManagementReloadWorkflow
|
||||
extends PhabricatorDaemonManagementWorkflow {
|
||||
|
||||
protected function didConstruct() {
|
||||
$this
|
||||
->setName('reload')
|
||||
->setSynopsis(
|
||||
pht(
|
||||
'Gracefully restart daemon processes in-place to pick up changes '.
|
||||
'to source. This will not disrupt running jobs. This is an '.
|
||||
'advanced workflow; most installs should use __phd restart__.'))
|
||||
->setArguments(
|
||||
array(
|
||||
array(
|
||||
'name' => 'pids',
|
||||
'wildcard' => true,
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
public function execute(PhutilArgumentParser $args) {
|
||||
return $this->executeReloadCommand($args->getArg('pids'));
|
||||
}
|
||||
|
||||
}
|
|
@ -389,28 +389,7 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
return 0;
|
||||
}
|
||||
|
||||
$running_pids = array_fuse(mpull($daemons, 'getPID'));
|
||||
if (!$pids) {
|
||||
$stop_pids = $running_pids;
|
||||
} else {
|
||||
// We were given a PID or set of PIDs to kill.
|
||||
$stop_pids = array();
|
||||
foreach ($pids as $key => $pid) {
|
||||
if (!preg_match('/^\d+$/', $pid)) {
|
||||
$console->writeErr(pht("PID '%s' is not a valid PID.", $pid)."\n");
|
||||
continue;
|
||||
} else if (empty($running_pids[$pid])) {
|
||||
$console->writeErr(
|
||||
pht(
|
||||
'PID "%d" is not a known Phabricator daemon PID. It will not '.
|
||||
'be killed.',
|
||||
$pid)."\n");
|
||||
continue;
|
||||
} else {
|
||||
$stop_pids[$pid] = $pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
$stop_pids = $this->selectDaemonPIDs($daemons, $pids);
|
||||
|
||||
if (!$stop_pids) {
|
||||
$console->writeErr(pht('No daemons to kill.')."\n");
|
||||
|
@ -452,6 +431,35 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
return 0;
|
||||
}
|
||||
|
||||
protected final function executeReloadCommand(array $pids) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
||||
$daemons = $this->loadRunningDaemons();
|
||||
if (!$daemons) {
|
||||
$console->writeErr(
|
||||
"%s\n",
|
||||
pht('There are no running daemons to reload.'));
|
||||
return 0;
|
||||
}
|
||||
|
||||
$reload_pids = $this->selectDaemonPIDs($daemons, $pids);
|
||||
if (!$reload_pids) {
|
||||
$console->writeErr(
|
||||
"%s\n",
|
||||
pht('No daemons to reload.'));
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($reload_pids as $pid) {
|
||||
$console->writeOut(
|
||||
"%s\n",
|
||||
pht('Reloading process %d...', $pid));
|
||||
posix_kill($pid, SIGHUP);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private function processRogueDaemons($grace_period, $warn, $force_stop) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
||||
|
@ -615,4 +623,33 @@ abstract class PhabricatorDaemonManagementWorkflow
|
|||
);
|
||||
}
|
||||
|
||||
private function selectDaemonPIDs(array $daemons, array $pids) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
|
||||
$running_pids = array_fuse(mpull($daemons, 'getPID'));
|
||||
if (!$pids) {
|
||||
$select_pids = $running_pids;
|
||||
} else {
|
||||
// We were given a PID or set of PIDs to kill.
|
||||
$select_pids = array();
|
||||
foreach ($pids as $key => $pid) {
|
||||
if (!preg_match('/^\d+$/', $pid)) {
|
||||
$console->writeErr(pht("PID '%s' is not a valid PID.", $pid)."\n");
|
||||
continue;
|
||||
} else if (empty($running_pids[$pid])) {
|
||||
$console->writeErr(
|
||||
"%s\n",
|
||||
pht(
|
||||
'PID "%d" is not a known Phabricator daemon PID.',
|
||||
$pid));
|
||||
continue;
|
||||
} else {
|
||||
$select_pids[$pid] = $pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $select_pids;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue