In order to output 0 elements you have to pass an empty collection to the
`collect` method.

You're right that our online documentation is lacking the fact that you're
only supposed to call `collect` once. It's actually documented in the
JavaDocs of this method. We should change this.

You're also right that the name `AsyncCollector` is definitely not the best
name for reflecting what it actually represents. I think the initial idea
was to make it look similar to the existing functions which are given a
`Collector`. Actually it is a promise/completable future and as such we
should maybe name it "ResultPromise"/"ResultFuture". I've opened a JIRA for
this [1].

[1] https://issues.apache.org/jira/browse/FLINK-5851

Cheers,
Till

On Mon, Feb 20, 2017 at 3:41 PM, Gyula Fóra <gyula.f...@gmail.com> wrote:

> Hi Till,
>
> Thanks, for the explanation!
>
> How do I express if I don't want to collect any elements in the async
> collector? Like 0 output from a flatmap.
>
> Also it doesn't seem to be specified anywhere that the AsyncCollector is
> "completed", it is just a collector. You should be able to collect multiple
> things to it, but it actually won't work if you try to do that from more
> than one Future.
>
> I wonder if it would make sense to change the API to make this more
> specific otherwise we might keep a lot of unnecessary state or have
> potential leaks depending on the usage.
>
> Just my thoughts, now I also understand the current rationale just I didn't
> completely get it for the first pass.
>
> Gyula
>
> Till Rohrmann <trohrm...@apache.org> ezt írta (időpont: 2017. febr. 20.,
> H,
> 15:35):
>
> > Hi Gyula,
> >
> > the assumption is that the AsyncCollector is either completed by the user
> > or, if you have a timeout defined, that it will be completed with a
> timeout
> > exception. This means that if you have no timeout defined, then you have
> to
> > make sure that the collector is completed. Otherwise you will have
> > lingering state which is never cleared. In that sense it follows the
> > semantics of normal futures.
> >
> > What do you mean by creating more than one future? More than one future
> > which completes the AsyncCollector? If that's the case, then the first
> > future which completes will also complete the AsyncCollector and the
> result
> > of the other future should be ignored.
> >
> > Cheers,
> > Till
> > ​
> >
> > On Mon, Feb 20, 2017 at 2:53 PM, Gyula Fóra <gyf...@apache.org> wrote:
> >
> > > Hi,
> > >
> > > I was looking at the AsyncFunction interface and try to wrap my head
> > around
> > > the implementation and the assumptions and I have some questions, maybe
> > > somebody could help me out :)
> > >
> > > What happens if the user does not collect any data or set a future to
> do
> > so
> > > in the invoke method?
> > > Also what happens if I create more than one Future?
> > >
> > > It seems that the "streamRecordBufferEntry"  logic assumes that there
> > will
> > > be a Future that eventually collects 1 thing or the user does this
> > > directly.
> > > Do I understand correctly? If not I am probably missing the part where
> > the
> > > buffer entry is removed immediately if no async request was made.
> > >
> > > Thank you!
> > > Gyula
> > >
> >
>

Reply via email to