Documentation glitch w/AsyncFunction?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Documentation glitch w/AsyncFunction?

Ken Krugler
Hi devs,

https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/operators/asyncio.html <https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/operators/asyncio.html>

Has this example of asyncInvoke:

> @Override
>     public void asyncInvoke(final String str, final ResultFuture<Tuple2<String, String>> resultFuture) throws Exception {
>
>         // issue the asynchronous request, receive a future for result
>         Future<String> resultFuture = client.query(str);
>
>         // set the callback to be executed once the request by the client is complete
>         // the callback simply forwards the result to the result future
>         resultFuture.thenAccept( (String result) -> {
>
>             resultFuture.complete(Collections.singleton(new Tuple2<>(str, result)));
>          
>         });
>     }

1. there’s a resultFuture parameter, and a resultFuture variable.

2. resultFuture.thenAccept() is a method available for CompletableFuture <https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html>, not Future.

I can fix this up, but I’m wondering what you think the code should do, assuming there’s a typical client that returns a Future vs. a CompletableFuture.

e.g. I could use CompletableFuture.supplyAsync(new Supplier<String>() { } with a get that calls the Future’s get().

Thanks,

— Ken

--------------------------------------------
http://about.me/kkrugler
+1 530-210-6378

Reply | Threaded
Open this post in threaded view
|

Re: Documentation glitch w/AsyncFunction?

Ted Yu
bq.          resultFuture.thenAccept( (String result) -> {

I think the type of variable for the above call should be CompletableFuture.
Meaning, the variable currently named resultFuture should be renamed so
that the intention is clearer.

bq.              resultFuture.complete(Collections.singleton(new
Tuple2<>(str, result)));

Looking at existing code in unit tests, the complete() call is on the
parameter.

Cheers

On Sat, Apr 14, 2018 at 8:34 AM, Ken Krugler <[hidden email]>
wrote:

> Hi devs,
>
> https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/
> operators/asyncio.html <https://ci.apache.org/projects/flink/flink-docs-
> release-1.4/dev/stream/operators/asyncio.html>
>
> Has this example of asyncInvoke:
>
> > @Override
> >     public void asyncInvoke(final String str, final
> ResultFuture<Tuple2<String, String>> resultFuture) throws Exception {
> >
> >         // issue the asynchronous request, receive a future for result
> >         Future<String> resultFuture = client.query(str);
> >
> >         // set the callback to be executed once the request by the
> client is complete
> >         // the callback simply forwards the result to the result future
> >         resultFuture.thenAccept( (String result) -> {
> >
> >             resultFuture.complete(Collections.singleton(new
> Tuple2<>(str, result)));
> >
> >         });
> >     }
>
> 1. there’s a resultFuture parameter, and a resultFuture variable.
>
> 2. resultFuture.thenAccept() is a method available for CompletableFuture <
> https://docs.oracle.com/javase/8/docs/api/java/util/
> concurrent/CompletableFuture.html>, not Future.
>
> I can fix this up, but I’m wondering what you think the code should do,
> assuming there’s a typical client that returns a Future vs. a
> CompletableFuture.
>
> e.g. I could use CompletableFuture.supplyAsync(new Supplier<String>() { }
> with a get that calls the Future’s get().
>
> Thanks,
>
> — Ken
>
> --------------------------------------------
> http://about.me/kkrugler
> +1 530-210-6378
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Documentation glitch w/AsyncFunction?

Ken Krugler
Hi Ted,

Thanks - yes regarding renaming the variable, and changing the type.

The other issue is that most clients return a Future, not a CompletableFuture.

So should I do the bit of extra code to show using a CompletableFuture with a Future?

— Ken

> On Apr 14, 2018, at 9:13 AM, Ted Yu <[hidden email]> wrote:
>
> bq.          resultFuture.thenAccept( (String result) -> {
>
> I think the type of variable for the above call should be CompletableFuture.
> Meaning, the variable currently named resultFuture should be renamed so
> that the intention is clearer.
>
> bq.              resultFuture.complete(Collections.singleton(new
> Tuple2<>(str, result)));
>
> Looking at existing code in unit tests, the complete() call is on the
> parameter.
>
> Cheers
>
> On Sat, Apr 14, 2018 at 8:34 AM, Ken Krugler <[hidden email]>
> wrote:
>
>> Hi devs,
>>
>> https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/
>> operators/asyncio.html <https://ci.apache.org/projects/flink/flink-docs-
>> release-1.4/dev/stream/operators/asyncio.html>
>>
>> Has this example of asyncInvoke:
>>
>>> @Override
>>>    public void asyncInvoke(final String str, final
>> ResultFuture<Tuple2<String, String>> resultFuture) throws Exception {
>>>
>>>        // issue the asynchronous request, receive a future for result
>>>        Future<String> resultFuture = client.query(str);
>>>
>>>        // set the callback to be executed once the request by the
>> client is complete
>>>        // the callback simply forwards the result to the result future
>>>        resultFuture.thenAccept( (String result) -> {
>>>
>>>            resultFuture.complete(Collections.singleton(new
>> Tuple2<>(str, result)));
>>>
>>>        });
>>>    }
>>
>> 1. there’s a resultFuture parameter, and a resultFuture variable.
>>
>> 2. resultFuture.thenAccept() is a method available for CompletableFuture <
>> https://docs.oracle.com/javase/8/docs/api/java/util/
>> concurrent/CompletableFuture.html>, not Future.
>>
>> I can fix this up, but I’m wondering what you think the code should do,
>> assuming there’s a typical client that returns a Future vs. a
>> CompletableFuture.
>>
>> e.g. I could use CompletableFuture.supplyAsync(new Supplier<String>() { }
>> with a get that calls the Future’s get().
>>
>> Thanks,
>>
>> — Ken
>>
>> --------------------------------------------
>> http://about.me/kkrugler
>> +1 530-210-6378
>>
>>

--------------------------------------------
http://about.me/kkrugler
+1 530-210-6378

Reply | Threaded
Open this post in threaded view
|

Re: Documentation glitch w/AsyncFunction?

Ted Yu
Sounds good to me.

On Sat, Apr 14, 2018 at 9:55 AM, Ken Krugler <[hidden email]>
wrote:

> Hi Ted,
>
> Thanks - yes regarding renaming the variable, and changing the type.
>
> The other issue is that most clients return a Future, not a
> CompletableFuture.
>
> So should I do the bit of extra code to show using a CompletableFuture
> with a Future?
>
> — Ken
>
> > On Apr 14, 2018, at 9:13 AM, Ted Yu <[hidden email]> wrote:
> >
> > bq.          resultFuture.thenAccept( (String result) -> {
> >
> > I think the type of variable for the above call should be
> CompletableFuture.
> > Meaning, the variable currently named resultFuture should be renamed so
> > that the intention is clearer.
> >
> > bq.              resultFuture.complete(Collections.singleton(new
> > Tuple2<>(str, result)));
> >
> > Looking at existing code in unit tests, the complete() call is on the
> > parameter.
> >
> > Cheers
> >
> > On Sat, Apr 14, 2018 at 8:34 AM, Ken Krugler <
> [hidden email]>
> > wrote:
> >
> >> Hi devs,
> >>
> >> https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/
> >> operators/asyncio.html <https://ci.apache.org/
> projects/flink/flink-docs-
> >> release-1.4/dev/stream/operators/asyncio.html>
> >>
> >> Has this example of asyncInvoke:
> >>
> >>> @Override
> >>>    public void asyncInvoke(final String str, final
> >> ResultFuture<Tuple2<String, String>> resultFuture) throws Exception {
> >>>
> >>>        // issue the asynchronous request, receive a future for result
> >>>        Future<String> resultFuture = client.query(str);
> >>>
> >>>        // set the callback to be executed once the request by the
> >> client is complete
> >>>        // the callback simply forwards the result to the result future
> >>>        resultFuture.thenAccept( (String result) -> {
> >>>
> >>>            resultFuture.complete(Collections.singleton(new
> >> Tuple2<>(str, result)));
> >>>
> >>>        });
> >>>    }
> >>
> >> 1. there’s a resultFuture parameter, and a resultFuture variable.
> >>
> >> 2. resultFuture.thenAccept() is a method available for
> CompletableFuture <
> >> https://docs.oracle.com/javase/8/docs/api/java/util/
> >> concurrent/CompletableFuture.html>, not Future.
> >>
> >> I can fix this up, but I’m wondering what you think the code should do,
> >> assuming there’s a typical client that returns a Future vs. a
> >> CompletableFuture.
> >>
> >> e.g. I could use CompletableFuture.supplyAsync(new Supplier<String>()
> { }
> >> with a get that calls the Future’s get().
> >>
> >> Thanks,
> >>
> >> — Ken
> >>
> >> --------------------------------------------
> >> http://about.me/kkrugler
> >> +1 530-210-6378
> >>
> >>
>
> --------------------------------------------
> http://about.me/kkrugler
> +1 530-210-6378
>
>