getVia() and waitVia()
Summary: Introduce ProgressableExecutor, which is an Executor that can be driven somehow. Examples include EventBase and ManualExecutor Then introduce Future<T>::getVia(ProgressableExecutor*) and Future<T>::waitVia(ProgressableExecutor*) that drive the given executor until the Future is complete, with the usual semantics of get and wait respectively This is a really common pattern in tests and you can see in the various changes to other projects lends sopme nice redness and cleanliness Some notes: 1. I don't like ProgressableExecutor::makeProgress() that much. Too verbose. Maybe DrivableExecutor::drive()? Something else? Thoughts? 2. I still need to integrate this with some stuff in Zeus (SessionFuture) and Zookeeper (ZookeeperFuture) but I'm going to do that in a separate diff because it's going to be a little more intrusive 3. These APIs take a raw ptr so that they are consistent with via() 4. See inline note on ManualExecutor 5. See inline note in added unit tests Test Plan: add unit for new API, wait for contbuild Reviewed By: hans@fb.com Subscribers: trunkagent, dresende, pzq, tdimson, fbcode-common-diffs@, targeting-diff-backend@, alandau, apollo-diffs@, bmatheny, everstore-dev@, zhuohuang, laser-diffs@, mshneer, folly-diffs@, hannesr, jsedgwick FB internal diff: D1789122 Tasks: 5940008 Signature: t1:1789122:1421868315:6ea2fc2702be1dc283c24a46d345fb5da3935b32
Showing
Please register or sign in to comment