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
Unknown Object (File)
Tue, Jan 28, 5:21 PM
Unknown Object (File)
Tue, Jan 28, 5:40 AM
Unknown Object (File)
Fri, Jan 17, 3:25 AM
Unknown Object (File)
Wed, Jan 8, 2:45 PM
Unknown Object (File)
Jan 2 2025, 12:40 AM
Unknown Object (File)
Dec 30 2024, 7:59 PM
Unknown Object (File)
Dec 16 2024, 6:25 AM
Unknown Object (File)
Dec 10 2024, 10:38 AM
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