> On Aug 21, 2019, at 8:49 AM, Alberto Gomez <alberto.go...@est.tech> wrote:
> 2. Timeout in ResultCollector::getResult() and Execution::execute() blocking
> 
> Regarding the timeout in the ResultCollector::getResult() method problem and 
> the blocking/non-blocking confusion for Execution::execute() two alternatives 
> are considered:
> 
> a) Remove the possibility of setting a timeout on the 
> ResultCollector::getResult() method on the client side as with the current 
> client implementation it is useless. This could be done by removing the 
> method with the timeout parameter from the public API.
> 
> It would be advisable to make explicit in the documentation that the 
> getResult() method does not wait for results to arrive as that should have 
> already been done in the Execution::execute() invocation.
> 
> This alternative is very simple and would keep things pretty much as they are 
> today.

To be honest I think approach would go against what a user “thinks” is going 
on. Given that there hasn’t been a timeout on execute I assumed it was 
asynchronous and that the getResult blocked until timeout or results arrived. 
Typically these two calls were done back to back.


> b) Transform the Execution::execute() method on the client side into a 
> non-blocking method.
> 
> This alternative is more complex and requires changes in all the clients. 
> Apart from that it has implications on the public client API it requires 
> moving the exceptions offered currently by the Execution::execute() method to 
> the ResultCollector::getResult() and new threads will have to be managed.

I think this is more in line with what users expect is going on based on the 
current API, I know I have. If were are going to make any change I think this 
is the one. I don’t think the behavior change is a problem since it's what is 
expected to be happening anyway.

> An outline of a possible implementation for option b) would be:
> 
>  *   Instead of invoking the ServerRegionProxy::executeFunction() directly as 
> it is done today, create a Future that invokes this method and returns the 
> resultCollector passed as parameter.

Do you really think we need to introduce Futures here into the API? I feel like 
the ResultCollector acts as the Future. I don’t think any change needs to be 
made to the API in this regard. The ResultCollector implementation would just 
simply block as implied by the api for the timeout period. I would change the 
method to have units though and deprecate the method without units.

-Jake


Reply via email to