On the one hand, I agree with Alexey.
CompletableFuture has complete* methods which should not be available to
the user code.
This can be solved with a simple interface like we do in Thin Client:
IgniteClientFuture<T> extends Future<T>, CompletionStage<T>


On the other hand:
- CompletionStage has toCompletableFuture anyway (rather weird)
- Other libraries use CompletableFuture and it seems to be fine
- Using CompletableFuture is the simplest approach


So I lean towards CompletableFuture too.

On Fri, Mar 26, 2021 at 10:46 AM Alexey Kukushkin <kukushkinale...@gmail.com>
wrote:

> I do not like Java's CompletableFuture and prefer our own Future (revised
> IgniteFuture).
>
> My understanding of the Future (or Promise) pattern in general is having
> two separate APIs:
>
>    1. Server-side: create, set result, raise error, cancel from server.
>    2. Client-side: get result, handle error, cancel from client
>
> Java's CompletableFuture looks like both the client-side and
> server-side API. The "Completeable" prefix in the name is already confusing
> for a client since it cannot "complete" an operation, only a server can.
>
> I would create our own IgniteFuture adding client-side functionality we
> currently miss (like client-side cancellation).
>
>
> пт, 26 мар. 2021 г. в 01:08, Valentin Kulichenko <
> valentin.kuliche...@gmail.com>:
>
> > Andrey,
> >
> > Can you compile a full list of these risky methods, and elaborate on what
> > the risks are?
> >
> > Generally, CompletableFuture is a much better option, because it's
> > standard. But we need to make sure it actually fits our needs and doesn't
> > do more harm than good.
> >
> > -Val
> >
> > On Thu, Mar 25, 2021 at 12:23 PM Alexei Scherbakov <
> > alexey.scherbak...@gmail.com> wrote:
> >
> > > I think both options are fine, but personally lean toward
> > > CompletableFuture.
> > >
> > > чт, 25 мар. 2021 г. в 17:56, Atri Sharma <a...@apache.org>:
> > >
> > > > I would suggest using CompletableFuture -- I don't see a need for a
> > > custom
> > > > interface that is unique to us.
> > > >
> > > > It also allows a lower barrier for new contributors for understanding
> > > > existing code
> > > >
> > > > On Thu, 25 Mar 2021, 20:18 Andrey Mashenkov, <
> > andrey.mashen...@gmail.com
> > > >
> > > > wrote:
> > > >
> > > > > Hi Igniters,
> > > > >
> > > > > I'd like to start a discussion about replacing our custom
> > IgniteFuture
> > > > > class with CompletableFuture - existed JDK class
> > > > > or rework it's implementation (like some other products done) to a
> > > > > composition of CompletionStage and Future interfaces.
> > > > > or maybe other option if you have any ideas. Do you?
> > > > >
> > > > > 1. The first approach pros and cons are
> > > > > + Well-known JDK class
> > > > > + Already implemented
> > > > > - It is a class, not an interface.
> > > > > - Expose some potentially harmful methods like "complete()".
> > > > >
> > > > > On the other side, it has copy() method to create defensive copy
> and
> > > > > minimalCompletionStage() to restrict harmful method usage.
> > > > > Thus, this look like an applicable solution, but we should be
> careful
> > > > > exposing internal future to the outside.
> > > > >
> > > > > 2. The second approach is to implement our own interface like the
> > next
> > > > one:
> > > > >
> > > > > interface IgniteFuture<T> extends CompletableStage<T>, Future<T> {
> > > > > }
> > > > >
> > > > > Pros and cons are
> > > > > + Our interfaces/classes contracts will expose an interface rather
> > than
> > > > > concrete implementation.
> > > > > + All methods are safe.
> > > > > - Some implementation is required.
> > > > > - CompletableStage has a method toCompletableFuture() and can be
> > > > converted
> > > > > to CompletableFuture. This should be supported.
> > > > >
> > > > > However, we still could wrap CompletableFuture and don't bother
> about
> > > > > creating a defensive copy.
> > > > >
> > > > >
> > > > > Other project experience:
> > > > > * Spotify uses CompletableFuture directly [1].
> > > > > * Redis goes the second approach [2]
> > > > > * Vertx explicitly extends CompletableFuture [3]. However, they
> have
> > > > custom
> > > > > future classes and a number of helpers that could be replaced with
> > > > > CompletableStage. Maybe it is just a legacy.'
> > > > >
> > > > > Any thoughts?
> > > > >
> > > > > [1]
> > > > >
> > > > >
> > > >
> > >
> >
> https://spotify.github.io/completable-futures/apidocs/com/spotify/futures/ConcurrencyReducer.html
> > > > > [2]
> > > > >
> > > > >
> > > >
> > >
> >
> https://lettuce.io/lettuce-4/release/api/com/lambdaworks/redis/RedisFuture.html
> > > > > [3]
> > > > >
> > > > >
> > > >
> > >
> >
> https://javadoc.io/static/org.jspare.vertx/vertx-jspare/1.1.0-M03/org/jspare/vertx/concurrent/VertxCompletableFuture.html
> > > > > --
> > > > > Best regards,
> > > > > Andrey V. Mashenkov
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Best regards,
> > > Alexei Scherbakov
> > >
> >
>
>
> --
> Best regards,
> Alexey
>

Reply via email to