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 > > > > > >