(futures) Make executors sticky
authorHans Fugal <fugalh@fb.com>
Fri, 20 Feb 2015 17:03:14 +0000 (09:03 -0800)
committerAlecs King <int@fb.com>
Tue, 3 Mar 2015 03:26:10 +0000 (19:26 -0800)
commitfc6f0a5fcaf2f3a08395d73e8cef955b00fe7c5d
treedb45cdca1284de2ae6a9eea08c0a821f5c9f6c74
parent5e32096ce48bc300b14e95b11f5f09df7e3e5b13
(futures) Make executors sticky

Summary:
Instead of returning a deactivated future, have `via` just set the executor. Propagate the executor from `then`. This fixes the `via().get()` problem, and has semantics similar to before for `via().then().then()`.

However, the semantics are now slightly different - each `then` goes back through the executor. This adds some overhead and tweaks the semantics (e.g. if the executor is a threadpool it might execute subsequent `then`s in another thread). However, with `futures::chain` recently introduced, and any other convenience methods that you can dream up and make a case for, we can reasonably get the old once-through-the-executor behavior when performance or other concerns demand it. e.g. `via().then(futures::chain(a, b, c))`.

Test Plan: unit tests

Reviewed By: hannesr@fb.com

Subscribers: zeus-diffs@, mmandal, steveo, rituraj, trunkagent, exa, folly-diffs@, yfeldblum, jsedgwick, davejwatson

FB internal diff: D1839691

Tasks: 6048744

Signature: t1:1839691:1424397180:ca0b0ea7b3867769ab8abd254a510059df67011e
folly/futures/Future-inl.h
folly/futures/Future.h
folly/futures/detail/Core.h
folly/futures/test/FutureTest.cpp
folly/futures/test/ViaTest.cpp