Page MenuHomePhabricator

D11899.id28662.diff
No OneTemporary

D11899.id28662.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -353,7 +353,7 @@
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de',
'rsrc/js/application/conpherence/behavior-durable-column.js' => '0c404426',
- 'rsrc/js/application/conpherence/behavior-menu.js' => 'b255d93b',
+ 'rsrc/js/application/conpherence/behavior-menu.js' => '869e3445',
'rsrc/js/application/conpherence/behavior-pontificate.js' => '86df5915',
'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90',
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
@@ -557,7 +557,7 @@
'javelin-behavior-boards-dropdown' => '0ec56e1d',
'javelin-behavior-choose-control' => '6153c708',
'javelin-behavior-config-reorder-fields' => '14a827de',
- 'javelin-behavior-conpherence-menu' => 'b255d93b',
+ 'javelin-behavior-conpherence-menu' => '869e3445',
'javelin-behavior-conpherence-pontificate' => '86df5915',
'javelin-behavior-conpherence-widget-pane' => '40b1ff90',
'javelin-behavior-countdown-timer' => 'e4cc26b3',
@@ -1457,6 +1457,17 @@
'85ea0626' => array(
'javelin-install',
),
+ '869e3445' => array(
+ 'javelin-behavior',
+ 'javelin-dom',
+ 'javelin-util',
+ 'javelin-stratcom',
+ 'javelin-workflow',
+ 'javelin-behavior-device',
+ 'javelin-history',
+ 'javelin-vector',
+ 'phabricator-shaped-request',
+ ),
'86df5915' => array(
'javelin-behavior',
'javelin-dom',
@@ -1648,17 +1659,6 @@
'javelin-dom',
'javelin-reactor-dom',
),
- 'b255d93b' => array(
- 'javelin-behavior',
- 'javelin-dom',
- 'javelin-util',
- 'javelin-stratcom',
- 'javelin-workflow',
- 'javelin-behavior-device',
- 'javelin-history',
- 'javelin-vector',
- 'phabricator-shaped-request',
- ),
'b2b4fbaf' => array(
'javelin-behavior',
'javelin-dom',
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1614,6 +1614,7 @@
'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 @@
'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow',
+ 'PhabricatorDaemonManagementReloadWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow',
'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow',
diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php
new file mode 100644
--- /dev/null
+++ b/src/applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php
@@ -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'));
+ }
+
+}
diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php
--- a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php
+++ b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php
@@ -389,28 +389,7 @@
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 @@
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 @@
);
}
+ 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;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 27, 10:17 AM (2 d, 12 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8649557
Default Alt Text
D11899.id28662.diff (7 KB)

Event Timeline