• James Sedgwick's avatar
    getVia() and waitVia() · 9f916e14
    James Sedgwick authored
    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
    9f916e14
EventBase.h 20.4 KB