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
F17909542: D21423.diff
Tue, Jul 29, 2:24 PM
F17705772: D21423.id50974.diff
Wed, Jul 16, 9:20 AM
Unknown Object (File)
Jul 2 2025, 12:42 AM
Unknown Object (File)
Jun 5 2025, 5:02 PM
Unknown Object (File)
Apr 30 2025, 11:55 AM
Unknown Object (File)
Apr 29 2025, 3:30 PM
Unknown Object (File)
Apr 25 2025, 4:30 PM
Unknown Object (File)
Apr 19 2025, 5:33 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