Page MenuHomePhabricator

Give Futures clearer start/end and exception semantics
ClosedPublic

Authored by epriestley on Jul 23 2020, 5:07 PM.
Tags
None
Referenced Files
F14090853: D21423.diff
Sun, Nov 24, 8:48 PM
Unknown Object (File)
Fri, Nov 22, 2:27 AM
Unknown Object (File)
Thu, Nov 21, 7:44 AM
Unknown Object (File)
Sun, Nov 17, 4:29 AM
Unknown Object (File)
Wed, Oct 30, 7:52 PM
Unknown Object (File)
Oct 9 2024, 10:04 PM
Unknown Object (File)
Oct 8 2024, 2:06 PM
Unknown Object (File)
Oct 3 2024, 2:38 PM
Subscribers
None

Details

Summary

Ref T13555. Currently:

  • If an exception is raised in "start()", the exception state is not set on the future.
  • Futures do not always call "startFuture()" before starting, and do not always call "endFuture()" once they become resolvable.
  • If you start an ExecFuture which immediately fails and then call "getPID()" on it, you get an unclear exception.

Simplify these behaviors:

  • In FutureIterator, only start futures which have not already started.
  • When starting a future on any pathway, run start code.
  • When a future becomes resolvable on any pathway, run end code.
  • Raise a more clear exception when calling "getPID()" on a future with no subprocess.
Test Plan

Faked a failing subprocess with "$proc = null", ran "bin/phd debug taskmaster" etc. Got clearer errors and more consistent future lifecycle workflows.

Diff Detail

Repository
rARC Arcanist
Branch
future1
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 24796
Build 34208: Run Core Tests
Build 34207: arc lint + arc unit