1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-29 10:12:41 +01:00

Use "MethodCallFuture" to move Diffusion Conduit exceptions to resolution time

Summary:
Depends on D21720. Ref T13666. See D21720 for additional discussion.

Use "MethodCallFuture", introduced in D21720, so that exceptions raised in "execute()" are thrown when the future is resolved, not when the future is created.

This makes exception behavior for clustered and non-clustered setups consistent, and chooses the intended (clustered) behavior in both cases, which currently deals with errors better.

Test Plan:
  - Applied both parts of the patch in T13666 (break history queries, force immediate futures) to reproduce the issue in T13666.
    - Loaded a Diffusion landing page, reproduced the error described in that task.
  - Applied this patch, verified landing page works again.
  - Removed the "break history queries" change, verified landing page works in forced-immediate mode.
  - Removed the "force immediate" change, verified landing page works in "actual future" mode.

Reviewers: cspeckmim

Reviewed By: cspeckmim

Maniphest Tasks: T13666

Differential Revision: https://secure.phabricator.com/D21721
This commit is contained in:
epriestley 2021-09-04 14:08:06 -07:00
parent 1965b78b34
commit b757e5c302

View file

@ -2269,10 +2269,9 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
$never_proxy); $never_proxy);
if (!$client) { if (!$client) {
$result = id(new ConduitCall($method, $params)) $conduit_call = id(new ConduitCall($method, $params))
->setUser($viewer) ->setUser($viewer);
->execute(); $future = new MethodCallFuture($conduit_call, 'execute');
$future = new ImmediateFuture($result);
} else { } else {
$future = $client->callMethod($method, $params); $future = $client->callMethod($method, $params);
} }