mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 06:42:42 +01:00
When an in-process worker subtask fails permanently, don't fatal the whole process
Summary: Ref T13552. Fixes T13569. Currently, if a process uses in-process tasks (usually, a debugging/diagnostic workflow) and those tasks (or tasks those tasks queue) fail permanently, the exception escapes to top level and the process exits. This isn't desirable; catch the exception and fail them locally instead. Test Plan: With a failing Asana integration and misconfigured Webhook, ran `bin/repository reparse --publish ...`. - Before: fatals on each substep. - After: warnings emitted for failed substep, but process completes. Maniphest Tasks: T13569, T13552 Differential Revision: https://secure.phabricator.com/D21459
This commit is contained in:
parent
93ef902ffa
commit
737e7c8541
1 changed files with 14 additions and 3 deletions
|
@ -162,6 +162,19 @@ abstract class PhabricatorWorker extends Phobject {
|
|||
try {
|
||||
$worker->executeTask();
|
||||
$worker->flushTaskQueue();
|
||||
|
||||
$task_result = PhabricatorWorkerArchiveTask::RESULT_SUCCESS;
|
||||
break;
|
||||
} catch (PhabricatorWorkerPermanentFailureException $ex) {
|
||||
$proxy = new PhutilProxyException(
|
||||
pht(
|
||||
'In-process task ("%s") failed permanently.',
|
||||
$task_class),
|
||||
$ex);
|
||||
|
||||
phlog($proxy);
|
||||
|
||||
$task_result = PhabricatorWorkerArchiveTask::RESULT_FAILURE;
|
||||
break;
|
||||
} catch (PhabricatorWorkerYieldException $ex) {
|
||||
phlog(
|
||||
|
@ -177,9 +190,7 @@ abstract class PhabricatorWorker extends Phobject {
|
|||
// object with a valid ID.
|
||||
$task->openTransaction();
|
||||
$task->save();
|
||||
$archived = $task->archiveTask(
|
||||
PhabricatorWorkerArchiveTask::RESULT_SUCCESS,
|
||||
0);
|
||||
$archived = $task->archiveTask($task_result, 0);
|
||||
$task->saveTransaction();
|
||||
|
||||
return $archived;
|
||||
|
|
Loading…
Reference in a new issue