mesos-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ben Mahler" <benjamin.mah...@gmail.com>
Subject Re: Review Request 17685: Revisited Future::discard semantics.
Date Thu, 20 Feb 2014 00:44:25 GMT

-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/17685/#review34957
-----------------------------------------------------------

Ship it!


Ship It!

- Ben Mahler


On Feb. 18, 2014, 8:43 a.m., Benjamin Hindman wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/17685/
> -----------------------------------------------------------
> 
> (Updated Feb. 18, 2014, 8:43 a.m.)
> 
> 
> Review request for mesos, Adam B, Ben Mahler, Ian Downes, Jie Yu, Niklas Nielsen, TILL
TOENSHOFF, Vinod Kone, and Jiang Yan Xu.
> 
> 
> Repository: mesos-git
> 
> 
> Description
> -------
> 
> Previously, invoking Future::discard caused a future to transition
> into the DISCARDED state which meant that any callbacks associated wit
> such a transition (i.e., Future::onAny, Future::onDiscarded) got
> executed _even if the computation associated with the future had not
> yet completed_! This meant certain patterns where difficult if not all
> together impossible. Consider:
>     
>   ExpensiveResource* resource = new ExpensiveResource();
>     
>   Future<int> future = function()
>     .then([=] () { ... *resource ...; })
>     .onDiscarded([=] () { delete resource; });
>     
>   future.discard();
>     
> In the above code, it's possible that the onDiscarded lambda would
> execute _concurrently_ with the lambda in the then! With the new
> semantics, a discard is more advisorial: rather than transition a
> future it instead allows a subsequent computation to decide whether or
> not to cancel (or even begin) some computation. For example, the
> Future::then implementation uses the "discard" information to decide
> whether or not to execute the next lambda after the previous future
> has been satisfied.
>     
> A few new helpers have been added to support this refactor:
>     
>   Future::onDiscard(callback):
>     
>     Adds a callback for when Future::discard was executed on this future.
>     
>   Future::hasDiscard():
>     
>     Checks to see if Future::discard was executed on this future.
>     
>   Promise::discard():
>     
>     Transitions this promises underlying future to DISCARDED.
> 
> 
> Diffs
> -----
> 
>   3rdparty/libprocess/3rdparty/stout/tests/os/signals_tests.cpp 66caa0490189cb1aff3af1631fbcf7150658b6cc

>   3rdparty/libprocess/include/process/collect.hpp ff8ab341a588d26f9678aea7f53e892d292725ec

>   3rdparty/libprocess/include/process/deferred.hpp a25080f7cfc164108e89660d4c38de8b290aee02

>   3rdparty/libprocess/include/process/future.hpp aaf17af2eef0f1bf7062aa04469f1fa27bb4cfbe

>   3rdparty/libprocess/include/process/protobuf.hpp 7500601026a58c95325ffe4410a161d59ff7817e

>   3rdparty/libprocess/src/process.cpp 7bf2d70c59455f52b26374f78198c5c7dc0a883b 
>   3rdparty/libprocess/src/tests/http_tests.cpp 15e72a1857815347e13210b44dca14bdcc16adfa

>   3rdparty/libprocess/src/tests/io_tests.cpp c0ffe759408b75de442fdd0c0047d286534b2ebc

>   3rdparty/libprocess/src/tests/process_tests.cpp eb1fd22679c7390f43ce9fb04c8e8771077d907a

> 
> Diff: https://reviews.apache.org/r/17685/diff/
> 
> 
> Testing
> -------
> 
> make check
> 
> 
> Thanks,
> 
> Benjamin Hindman
> 
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message