It does sounds like a useful addition,
and I believe it could be implemented easily.
I can do it if the community agrees on changing the API of the Semaphore.

Best regards,
VJ

On Sun, Jan 17, 2016 at 5:53 AM, Andrey Kornev <andrewkor...@hotmail.com>
wrote:

> Dmitriy,I don't believe it makes sense to have the action execute
> remotely. At least I didn't think of it.In my mind, the action is always
> local (that's the reason I suggested the Java's Callable in the API and not
> serializable IgniteCallable, in the first place). What the action does is
> entirely up to the user. One could fire off a remote compute if that's what
> one wants.I hope I make myself clear.ThanksAndrey
>     _____________________________
> From: Dmitriy Setrakyan <dsetrak...@apache.org>
> Sent: Saturday, January 16, 2016 7:54 AM
> Subject: Re: Semaphore action
> To:  <dev@ignite.apache.org>
>
>
>                    Andrey,
>
>  In general this seems like a good addition. However, I do not understand
>  how you can specify an executor, given that execution could happen
>  remotely. Can you please clarify?
>
>  D.
>
>  On Fri, Jan 15, 2016 at 1:00 PM, Andrey Kornev <andrewkor...@hotmail.com>
>  wrote:
>
>  > Hi there,
>  >
>  > The Semaphore feature was a great addition to Ignite's synchronization
>  > primitive toolkit. I'd like to propose an enhancement to make Semaphore
> API
>  > even more useful.
>  >
>  > My biggest complaint about the current API is its blocking nature. For
>  > example, the only way to acquire a permit is by using the blocking
>  > acquire() method (tryAcquire() is not very useful in the cases when you
>  > MUST acquire before you can proceed). I believe that in the 21st century
>  > blocking APIs is anachronism. :))) It's a bit embarrassing even. I'm
> sure
>  > Ignite can do better than that! :)
>  >
>  > Usually a permit acquisition is followed by an action, followed by a
>  > release of the permit. I propose a simple enhancement to the Semaphore
> API
>  > that will reduce the boilerplate and make it possible to do all of that
>  > asynchronously! The new method might look like this:
>  >
>  > <T> IgniteFuture<T> acquireAndExecute(Callable<T> action);
>  > <T> IgniteFuture<T> acquireAndExecute(Callable<T> action, Executor
>  > executor);
>  >
>  > (The name could be improved, of course...) The first method would
>  > immediately return a future to be later completed by the action's
> result.
>  > The action will be executed on a thread from the Ignite's public thread
>  > pool once a permit has been acquired. Optionally, the user could
> specify a
>  > different executor using the second signature.
>  >
>  > Would the community be interested in such enhancement?
>  >
>  > Thanks
>  > Andrey
>  >
>  > PS. A subject for a separate discussion, but I believe that in the next
>  > major release Ignite should just drop the clumsy withAsync() API and
> make
>  > all blocking calls explicitly async by returning a future. In my
> opinion it
>  > would greatly simplify the API and make it more modern. Besides, I'm
> pretty
>  > sure that internally Ignite already creates futures for pretty much
> most of
>  > the API calls, so it should not cause any performance issue.
>  >
>
>
>
>
>

Reply via email to