Hi Martijn,

Yes, that is exactly what I tried to say implicitly in a polite manner. :))

Best regards,
Jing


On Tue, Jun 14, 2022 at 8:12 PM Martijn Visser <martijnvis...@apache.org>
wrote:

> Hi Alex and Jing,
>
> According to the Flink Bylaws and FLIP guide, this change would be a
> "change that impacts the public interfaces of the project". I do see little
> value in creating a special deprecation FLIP, but I do think it requires a
> [VOTE] thread which follows the FLIP approval process. So basically I would
> create a VOTE thread while linking to this discussion thread for context.
>
> Best regards,
>
> Martijn
>
> [1] https://cwiki.apache.org/confluence/display/FLINK/Flink+Bylaws
> [2]
>
> https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals#FlinkImprovementProposals-Whatisconsidereda%22majorchange%22thatneedsaFLIP
> ?
>
> Op di 14 jun. 2022 om 17:22 schreef Alexander Fedulov <
> alexan...@ververica.com>:
>
> > Hi Jing,
> >
> > I don't think we do pure deprecation FLIPs. I am also OK if we consider
> > consensus in this thread enough to proceed with opening the actual
> > deprecation PRs for the first two items of the umbrella ticket. In that
> > case, we can skip the vote.
> >
> > What do people prefer? Do you think we need to do a formal vote for
> > this change or should we simply kick it off with the first deprecations
> > based on the discussion above?
> >
> > Best,
> > Alexander Fedulov
> >
> > On Tue, Jun 14, 2022 at 4:26 PM Jing Ge <j...@ververica.com> wrote:
> >
> > > Hi Alex,
> > >
> > > I guess you are meaning to start a new voting thread following the FLIP
> > > discussion&voting concept. Looking forward to it!
> > >
> > > Best regards,
> > > Jing
> > >
> > > On Tue, Jun 14, 2022 at 3:35 PM Alexander Fedulov <
> > alexan...@ververica.com
> > > >
> > > wrote:
> > >
> > > > Hi Becket,
> > > >
> > > > thanks for your feedback. As proposed, I started an umbrella ticket
> [1]
> > > to
> > > > collect all the
> > > > steps needed. Please add any missing items.
> > > >
> > > > Judging by the discussion on this thread I propose to open a vote on
> > the
> > > > first two
> > > > subtasks since they are immediately actionable [2] [3].
> > > >
> > > > [1] https://issues.apache.org/jira/browse/FLINK-28045
> > > > [2] https://issues.apache.org/jira/browse/FLINK-28046
> > > > [3] https://issues.apache.org/jira/browse/FLINK-28047
> > > >
> > > > Best,
> > > > Alexander Fedulov
> > > >
> > > >
> > > > On Tue, Jun 14, 2022 at 4:37 AM Becket Qin <becket....@gmail.com>
> > wrote:
> > > >
> > > > > In general, I'll give a big +1 to deprecating the SourceFunction.
> > > > >
> > > > > That said, it is indeed worth looking into what might be missing or
> > > less
> > > > > easy to implement with FLIP-27 Source compared with the
> > SourceFunction.
> > > > > Maybe we can just compile a list of things to do in order to fully
> > > > > deprecate the SourceFunction. As far as I am aware of, there are
> two
> > > > things
> > > > > that need to be taken care of:
> > > > >
> > > > > 1. A simple high level API, as Jing mentioned, that makes simple
> > cases
> > > > that
> > > > > do not involve the split enumerator easier. Ideally this should be
> as
> > > > > simple as SourceFunction, if not simpler. Off the top of my head, I
> > > > think a
> > > > > default no-op split enumerator will just do the work. And the data
> > > > > generator of FLIP-238 could be an implementation using this high
> > level
> > > > API.
> > > > >
> > > > > 2. FLIP-208, which allows users to stop the job upon receiving a
> > record
> > > > in
> > > > > the stream.
> > > > >
> > > > > Is there anything else that we have heard from the users /
> connector
> > > > > developers that needs some attention?
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Jiangjie (Becket) Qin
> > > > >
> > > > >
> > > > >
> > > > > On Fri, Jun 10, 2022 at 3:25 PM David Anderson <
> dander...@apache.org
> > >
> > > > > wrote:
> > > > >
> > > > > > +1 for deprecating SourceFunction from me as well. And a big
> THANK
> > > YOU
> > > > to
> > > > > > Alex Fedulov for bringing forward FLIP-238.
> > > > > >
> > > > > > David
> > > > > >
> > > > > > On Fri, Jun 10, 2022 at 4:03 AM Lijie Wang <
> > wangdachui9...@gmail.com
> > > >
> > > > > > wrote:
> > > > > >
> > > > > > > Hi all,
> > > > > > >
> > > > > > > Sorry for my mistake. The
> `StreamExecutionEnvironment#readFiles`
> > > and
> > > > > can
> > > > > > be
> > > > > > > easily replaced by
> > > > > `FileSource#forRecordStreamFormat/forBulkFileFormat`.
> > > > > > I
> > > > > > > have no other concerns.
> > > > > > >
> > > > > > >  +1 to deprecate SourceFunction and deprecate the methods (in
> > > > > > > StreamExecutionEnvironment) based on SourceFunction .
> > > > > > >
> > > > > > > Best,
> > > > > > > Lijie
> > > > > > >
> > > > > > > Konstantin Knauf <kna...@apache.org> 于2022年6月10日周五 05:11写道:
> > > > > > >
> > > > > > > > Hi everyone,
> > > > > > > >
> > > > > > > > thank you Jing for redirecting the discussion back to the
> topic
> > > at
> > > > > > hand.
> > > > > > > I
> > > > > > > > agree with all of your points.
> > > > > > > >
> > > > > > > > +1 to deprecate SourceFunction
> > > > > > > >
> > > > > > > > Is there really no replacement for the
> > > > > > > StreamExecutionEnvironment#readXXX.
> > > > > > > > There is already a FLIP-27 based FileSource, right? What's
> > > missing
> > > > to
> > > > > > > > recommend using that as opposed to the the readXXX methods?
> > > > > > > >
> > > > > > > > Cheers,
> > > > > > > >
> > > > > > > > Konstantin
> > > > > > > >
> > > > > > > > Am Do., 9. Juni 2022 um 20:11 Uhr schrieb Alexander Fedulov <
> > > > > > > > alexan...@ververica.com>:
> > > > > > > >
> > > > > > > > > Hi all,
> > > > > > > > >
> > > > > > > > > It seems that there is some understandable cautiousness
> with
> > > > regard
> > > > > > to
> > > > > > > > > deprecating methods and subclasses that do not have
> > > alternatives
> > > > > just
> > > > > > > > yet.
> > > > > > > > >
> > > > > > > > > We should probably first agree if it is in general OK for
> > Flink
> > > > to
> > > > > > use
> > > > > > > > > @Deprecated
> > > > > > > > > annotation for parts of the code that do not have
> > alternatives.
> > > > In
> > > > > > that
> > > > > > > > > case,
> > > > > > > > > we could add a comment along the lines of:
> > > > > > > > > "This implementation is based on a deprecated
> SourceFunction
> > > API
> > > > > that
> > > > > > > > > will gradually be phased out from Flink. No direct
> substitute
> > > > > exists
> > > > > > at
> > > > > > > > the
> > > > > > > > > moment.
> > > > > > > > > If you want to have a more future-proof solution, consider
> > > > helping
> > > > > > the
> > > > > > > > > project by
> > > > > > > > > contributing an implementation based on the new Source
> API."
> > > > > > > > >
> > > > > > > > > This should clearly communicate the message that usage of
> > these
> > > > > > > > > methods/classes
> > > > > > > > > is discouraged and at the same time promote contributions
> for
> > > > > > > addressing
> > > > > > > > > the gap.
> > > > > > > > > What do you think?
> > > > > > > > >
> > > > > > > > > Best,
> > > > > > > > > Alexander Fedulov
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Thu, Jun 9, 2022 at 6:27 PM Ingo Bürk <
> > airbla...@apache.org
> > > >
> > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Hi,
> > > > > > > > > >
> > > > > > > > > > these APIs don't expose the underlying source directly,
> so
> > I
> > > > > don't
> > > > > > > > think
> > > > > > > > > > we need to worry about deprecating them as well. There's
> > also
> > > > > > nothing
> > > > > > > > > > inherently wrong with using a deprecated API internally,
> > > though
> > > > > > even
> > > > > > > > > > just for the experience of using our own new APIs I would
> > > > > > personally
> > > > > > > > say
> > > > > > > > > > that they should be migrated to the new Source API. It's
> > hard
> > > > to
> > > > > > > reason
> > > > > > > > > > that users must migrate to a new API if we don't do it
> > > > internally
> > > > > > as
> > > > > > > > > well.
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Best
> > > > > > > > > > Ingo
> > > > > > > > > >
> > > > > > > > > > On 09.06.22 15:41, Lijie Wang wrote:
> > > > > > > > > > >   Hi Martijn,
> > > > > > > > > > >
> > > > > > > > > > > I don't mean it's a blocker. Just a information. And
> I'm
> > > also
> > > > > +1
> > > > > > > for
> > > > > > > > > > this.
> > > > > > > > > > >
> > > > > > > > > > > Put it another way: should we migrate the
> > `#readFile(...)`
> > > to
> > > > > new
> > > > > > > API
> > > > > > > > > or
> > > > > > > > > > > provide a similar method "readxxx“ based on the new
> > Source
> > > > API?
> > > > > > > > > > >
> > > > > > > > > > > And if we don't migrate it, does it mean that the
> > > > > > `#readFile(...)`
> > > > > > > > > should
> > > > > > > > > > > also be marked as deprecated?
> > > > > > > > > > >
> > > > > > > > > > > Best,
> > > > > > > > > > > Lijie
> > > > > > > > > > >
> > > > > > > > > > > Martijn Visser <martijnvis...@apache.org> 于2022年6月9日周四
> > > > > 21:03写道:
> > > > > > > > > > >
> > > > > > > > > > >> Hi Lijie,
> > > > > > > > > > >>
> > > > > > > > > > >> I don't see any problem with deprecating those methods
> > at
> > > > this
> > > > > > > > moment,
> > > > > > > > > > as
> > > > > > > > > > >> long as we don't remove them until the replacements
> are
> > > > > > available.
> > > > > > > > > > Besides
> > > > > > > > > > >> that, are we sure there are no replacements already,
> > > > > especially
> > > > > > > with
> > > > > > > > > the
> > > > > > > > > > >> new FileSource?
> > > > > > > > > > >>
> > > > > > > > > > >> Best regards,
> > > > > > > > > > >>
> > > > > > > > > > >> Martijn
> > > > > > > > > > >>
> > > > > > > > > > >> Op do 9 jun. 2022 om 14:23 schreef Lijie Wang <
> > > > > > > > > wangdachui9...@gmail.com
> > > > > > > > > > >:
> > > > > > > > > > >>
> > > > > > > > > > >>> Hi all,
> > > > > > > > > > >>>
> > > > > > > > > > >>> FYI, currently, some commonly used methods in
> > > > > > > > > > StreamExecutionEnvironment
> > > > > > > > > > >>> are still based on the old SourceFunction (and there
> is
> > > no
> > > > > > > > > > alternative):
> > > > > > > > > > >>> `StreamExecutionEnvironment#readFile(...)`
> > > > > > > > > > >>> `StreamExecutionEnvironment#readTextFile(...)`
> > > > > > > > > > >>>
> > > > > > > > > > >>> I think these should be migrated to the new source
> API
> > > > before
> > > > > > > > > deprecate
> > > > > > > > > > >> the
> > > > > > > > > > >>> SourceFunction.
> > > > > > > > > > >>>
> > > > > > > > > > >>> Best,
> > > > > > > > > > >>> Lijie
> > > > > > > > > > >>>
> > > > > > > > > > >>> Martijn Visser <martijnvis...@apache.org>
> 于2022年6月9日周四
> > > > > > 16:05写道:
> > > > > > > > > > >>>
> > > > > > > > > > >>>> Hi all,
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> I think implicitly we've already considered the
> > > > > SourceFunction
> > > > > > > and
> > > > > > > > > > >>>> SinkFunction as deprecated. They are even marked as
> so
> > > on
> > > > > the
> > > > > > > > Flink
> > > > > > > > > > >>> roadmap
> > > > > > > > > > >>>> [1]. That also shows that connectors that are using
> > > these
> > > > > > > > interfaces
> > > > > > > > > > >> are
> > > > > > > > > > >>>> either approaching end-of-life. The fact that we're
> > > > actively
> > > > > > > > > migrating
> > > > > > > > > > >>>> connectors from Source/SinkFunction to
> > FLIP-27/FLIP-143
> > > > > (plus
> > > > > > > > add-on
> > > > > > > > > > >>> FLIPs)
> > > > > > > > > > >>>> shows that we've already determined that target.
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> With regards to the motivation of FLIP-27, I think
> > > reading
> > > > > up
> > > > > > on
> > > > > > > > the
> > > > > > > > > > >>>> original discussion thread is also worthwhile [2] to
> > see
> > > > > more
> > > > > > > > > context.
> > > > > > > > > > >>>> FLIP-27 was also very important as it brought a
> > unified
> > > > > > > connector
> > > > > > > > > > which
> > > > > > > > > > >>> can
> > > > > > > > > > >>>> support both streaming and batch (with batch being
> > > > > considered
> > > > > > a
> > > > > > > > > > special
> > > > > > > > > > >>>> case of streaming in Flink's vision).
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> So +1 to deprecate SourceFunction. I would also
> argue
> > > that
> > > > > we
> > > > > > > > should
> > > > > > > > > > >>>> already mark the SinkFunction as deprecated to avoid
> > > > having
> > > > > > this
> > > > > > > > > > >>> discussion
> > > > > > > > > > >>>> again in a couple of months.
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> Best regards,
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> Martijn
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> [1] https://flink.apache.org/roadmap.html
> > > > > > > > > > >>>> [2]
> > > > > > > > >
> > > https://lists.apache.org/thread/334co89dbhc8qpr9nvmz8t1gp4sz2c8y
> > > > > > > > > > >>>>
> > > > > > > > > > >>>> Op do 9 jun. 2022 om 09:48 schreef Jing Ge <
> > > > > > j...@ververica.com
> > > > > > > >:
> > > > > > > > > > >>>>
> > > > > > > > > > >>>>> Hi,
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> I am very happy to see opinions from different
> > > > > perspectives.
> > > > > > > That
> > > > > > > > > > >> will
> > > > > > > > > > >>>> help
> > > > > > > > > > >>>>> us understand the problem better. Thanks all for
> the
> > > > > > > informative
> > > > > > > > > > >>>>> discussion.
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> Let's see the big picture and check following facts
> > > > > together:
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> 1. FLIP-27 was intended to solve some technical
> > issues
> > > > that
> > > > > > are
> > > > > > > > > very
> > > > > > > > > > >>>>> difficult to solve with SourceFunction[1]. When we
> > say
> > > > > > > > > > >> "SourceFunction
> > > > > > > > > > >>> is
> > > > > > > > > > >>>>> easy", well, it depends. If we take a look at the
> > > > > > > implementation
> > > > > > > > of
> > > > > > > > > > >> the
> > > > > > > > > > >>>>> Kafka connector, we will know how complicated it is
> > to
> > > > > build
> > > > > > a
> > > > > > > > > > >> serious
> > > > > > > > > > >>>>> connector for production with the old
> SourceFunction.
> > > To
> > > > > > every
> > > > > > > > > > >> problem
> > > > > > > > > > >>>>> there is a solution and to every solution there is
> a
> > > > > problem.
> > > > > > > The
> > > > > > > > > > >> fact
> > > > > > > > > > >>> is
> > > > > > > > > > >>>>> that there is no perfect but a feasible solution.
> If
> > we
> > > > try
> > > > > > to
> > > > > > > > > solve
> > > > > > > > > > >>>>> complicated problems, we have to expose some
> > > complexity.
> > > > > > > > Comparing
> > > > > > > > > to
> > > > > > > > > > >>>>> connectors for POC, demo, training(no offense), I
> > would
> > > > > also
> > > > > > > > solve
> > > > > > > > > > >>> issues
> > > > > > > > > > >>>>> for connectors like Kafka connector that are widely
> > > used
> > > > in
> > > > > > > > > > >> production
> > > > > > > > > > >>>> with
> > > > > > > > > > >>>>> higher priority. I think that should be one reason
> > why
> > > > > > FLIP-27
> > > > > > > > has
> > > > > > > > > > >> been
> > > > > > > > > > >>>>> designed and why the new source API went public.
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> 2. FLIP-27 and the implementation was introduced
> > > roughly
> > > > at
> > > > > > the
> > > > > > > > end
> > > > > > > > > > >> of
> > > > > > > > > > >>>> 2019
> > > > > > > > > > >>>>> and went public on 19.04.2021, which means Flink
> has
> > > > > provided
> > > > > > > two
> > > > > > > > > > >>>> different
> > > > > > > > > > >>>>> public/graduated source solutions for more than one
> > > year.
> > > > > On
> > > > > > > the
> > > > > > > > > day
> > > > > > > > > > >>> that
> > > > > > > > > > >>>>> the new source API went public, there should be a
> > > > consensus
> > > > > > in
> > > > > > > > the
> > > > > > > > > > >>>>> community that we should start the migration. Old
> > > > > > > SourceFunction
> > > > > > > > > > >>>> interface,
> > > > > > > > > > >>>>> in the ideal case, should have been deprecated on
> > that
> > > > day,
> > > > > > > > > otherwise
> > > > > > > > > > >>> we
> > > > > > > > > > >>>>> should not graduate the new source API to avoid
> > > confusing
> > > > > > > > > (connector)
> > > > > > > > > > >>>>> developers[2].
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> 3. It is true that the new source API is hard to
> > > > understand
> > > > > > and
> > > > > > > > > even
> > > > > > > > > > >>> hard
> > > > > > > > > > >>>>> to implement for simple cases. Thanks for the
> > feedback.
> > > > > That
> > > > > > is
> > > > > > > > > > >>> something
> > > > > > > > > > >>>>> we need to improve. The current
> design&implementation
> > > > could
> > > > > > be
> > > > > > > > > > >>> considered
> > > > > > > > > > >>>>> as the low level API. The next step is to create
> the
> > > high
> > > > > > level
> > > > > > > > API
> > > > > > > > > > >> to
> > > > > > > > > > >>>>> reduce some unnecessary complexity for those simple
> > > > cases.
> > > > > > But,
> > > > > > > > > IMHO,
> > > > > > > > > > >>>> this
> > > > > > > > > > >>>>> should not be the prerequisite to postpone the
> > > > deprecation
> > > > > of
> > > > > > > the
> > > > > > > > > old
> > > > > > > > > > >>>>> SourceFunction APIs.
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> 4. As long as the old SourceFunction is not marked
> as
> > > > > > > deprecated,
> > > > > > > > > > >>>>> developers will continue asking which one should be
> > > used.
> > > > > > Let's
> > > > > > > > > make
> > > > > > > > > > >> a
> > > > > > > > > > >>>>> concrete example. If a new connector is developed
> now
> > > and
> > > > > the
> > > > > > > > > > >> developer
> > > > > > > > > > >>>>> asks for a suggestion of the choice between the old
> > and
> > > > new
> > > > > > > > source
> > > > > > > > > > >> API
> > > > > > > > > > >>> on
> > > > > > > > > > >>>>> the ML, which one should we suggest? I think it
> > should
> > > be
> > > > > the
> > > > > > > new
> > > > > > > > > > >>> Source
> > > > > > > > > > >>>>> API. If a fresh new connector has been developed
> with
> > > the
> > > > > old
> > > > > > > > > > >>>>> SourceFunction API before asking for the consensus
> in
> > > the
> > > > > > > > community
> > > > > > > > > > >> and
> > > > > > > > > > >>>> the
> > > > > > > > > > >>>>> developer wants to merge it to the master. Should
> we
> > > > allow
> > > > > > it?
> > > > > > > If
> > > > > > > > > the
> > > > > > > > > > >>>>> answer of all these questions is pointing to the
> new
> > > > Source
> > > > > > > API,
> > > > > > > > > the
> > > > > > > > > > >>> old
> > > > > > > > > > >>>>> SourceFunction is de facto already deprecated, just
> > has
> > > > not
> > > > > > > been
> > > > > > > > > > >> marked
> > > > > > > > > > >>>> as
> > > > > > > > > > >>>>> @deprecated, which confuses developers even more.
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>>   Best regards,
> > > > > > > > > > >>>>> Jing
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> [1]
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>
> > > > > > > > > > >>>
> > > > > > > > > > >>
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-27%3A+Refactor+Source+Interface
> > > > > > > > > > >>>>> [2]
> > > > > > > > >
> > > https://lists.apache.org/thread/7okp4y46n3o3rx5mn0t3qobrof8zxwqs
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>> On Wed, Jun 8, 2022 at 2:21 AM Alexander Fedulov <
> > > > > > > > > > >>>> alexan...@ververica.com>
> > > > > > > > > > >>>>> wrote:
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>>> Hey Austin,
> > > > > > > > > > >>>>>>
> > > > > > > > > > >>>>>> Since we are getting deeper into the
> implementation
> > > > > details
> > > > > > of
> > > > > > > > the
> > > > > > > > > > >>>>>> DataGeneratorSource
> > > > > > > > > > >>>>>> and it is not the main topic of this thread, I
> > propose
> > > > to
> > > > > > move
> > > > > > > > our
> > > > > > > > > > >>>>>> discussion to where it belongs: [DISCUSS] FLIP-238
> > > [1].
> > > > > > Could
> > > > > > > > you
> > > > > > > > > > >>>> please
> > > > > > > > > > >>>>>> briefly formulate your requirements to make it
> > easier
> > > > for
> > > > > > the
> > > > > > > > > > >> others
> > > > > > > > > > >>> to
> > > > > > > > > > >>>>>> follow? I am happy to continue this conversation
> > > there.
> > > > > > > > > > >>>>>>
> > > > > > > > > > >>>>>> [1]
> > > > > > > > > > >>
> > > > > > https://lists.apache.org/thread/7gjxto1rmkpff4kl54j8nlg5db2rqhkt
> > > > > > > > > > >>>>>>
> > > > > > > > > > >>>>>> Best,
> > > > > > > > > > >>>>>> Alexander Fedulov
> > > > > > > > > > >>>>>>
> > > > > > > > > > >>>>>> On Tue, Jun 7, 2022 at 6:14 PM Austin
> > Cawley-Edwards <
> > > > > > > > > > >>>>>> austin.caw...@gmail.com> wrote:
> > > > > > > > > > >>>>>>
> > > > > > > > > > >>>>>>>> @Austin, in the FLIP I mentioned above [1], the
> > user
> > > > is
> > > > > > > > > > >> expected
> > > > > > > > > > >>> to
> > > > > > > > > > >>>>>>> pass a MapFunction<Long,
> > > > > > > > > > >>>>>>> OUT>
> > > > > > > > > > >>>>>>> to the generator. I wonder if you could have your
> > > > > external
> > > > > > > > client
> > > > > > > > > > >>> and
> > > > > > > > > > >>>>>>> polling logic wrapped in a custom
> > > > > > > > > > >>>>>>> MapFunction implementation class? Would that
> answer
> > > > your
> > > > > > > needs
> > > > > > > > or
> > > > > > > > > > >>> do
> > > > > > > > > > >>>>> you
> > > > > > > > > > >>>>>>> have some
> > > > > > > > > > >>>>>>> more sophisticated scenario in mind?
> > > > > > > > > > >>>>>>>
> > > > > > > > > > >>>>>>> At first glance, the FLIP looks good but for this
> > > case
> > > > in
> > > > > > > > regards
> > > > > > > > > > >>> to
> > > > > > > > > > >>>>> the
> > > > > > > > > > >>>>>>> map function, but leaves out 1) ability to
> control
> > > > > polling
> > > > > > > > > > >>> intervals
> > > > > > > > > > >>>>> and
> > > > > > > > > > >>>>>> 2)
> > > > > > > > > > >>>>>>> ability to produce an unknown number of records,
> > both
> > > > > > > per-poll
> > > > > > > > > > >> and
> > > > > > > > > > >>>>>> overall
> > > > > > > > > > >>>>>>> boundedness. Do you think something like this
> could
> > > be
> > > > > > built
> > > > > > > > from
> > > > > > > > > > >>> the
> > > > > > > > > > >>>>>> same
> > > > > > > > > > >>>>>>> pieces?
> > > > > > > > > > >>>>>>> I'm also wondering what handles threading, is
> that
> > on
> > > > the
> > > > > > > user
> > > > > > > > or
> > > > > > > > > > >>> is
> > > > > > > > > > >>>>> that
> > > > > > > > > > >>>>>>> part of the DataGeneratorSource?
> > > > > > > > > > >>>>>>>
> > > > > > > > > > >>>>>>> Best,
> > > > > > > > > > >>>>>>> Austin
> > > > > > > > > > >>>>>>>
> > > > > > > > > > >>>>>>> On Tue, Jun 7, 2022 at 9:34 AM Alexander Fedulov
> <
> > > > > > > > > > >>>>>> alexan...@ververica.com>
> > > > > > > > > > >>>>>>> wrote:
> > > > > > > > > > >>>>>>>
> > > > > > > > > > >>>>>>>> Hi everyone,
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>> Thanks for all the input and a lively
> discussion.
> > It
> > > > > seems
> > > > > > > > that
> > > > > > > > > > >>>> there
> > > > > > > > > > >>>>>> is
> > > > > > > > > > >>>>>>> a
> > > > > > > > > > >>>>>>>> consensus that due to
> > > > > > > > > > >>>>>>>> the inherent complexity of FLIP-27 sources we
> > should
> > > > > > provide
> > > > > > > > > > >> more
> > > > > > > > > > >>>>>>>> user-facing utilities to bridge
> > > > > > > > > > >>>>>>>> the gap between the existing
> SourceFunction-based
> > > > > > > > functionality
> > > > > > > > > > >>> and
> > > > > > > > > > >>>>> the
> > > > > > > > > > >>>>>>> new
> > > > > > > > > > >>>>>>>> APIs.
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>> To start addressing this I picked the issue that
> > > David
> > > > > > > raised
> > > > > > > > > > >> and
> > > > > > > > > > >>>>> many
> > > > > > > > > > >>>>>>>> upvoted. Here is a proposal
> > > > > > > > > > >>>>>>>> for  the new DataGeneratorSource: FLIP-238 [1].
> > > Please
> > > > > > take
> > > > > > > a
> > > > > > > > > > >>>> look, I
> > > > > > > > > > >>>>>> am
> > > > > > > > > > >>>>>>>> going to open a separate
> > > > > > > > > > >>>>>>>> discussion thread on it shortly.
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>> Jing also raised some great points regarding the
> > > > > > interfaces
> > > > > > > > and
> > > > > > > > > > >>>>>>> subclasses.
> > > > > > > > > > >>>>>>>> It seems to me that
> > > > > > > > > > >>>>>>>> what might actually help is some sort of a "soft
> > > > > > > deprecation"
> > > > > > > > > > >>>> concept
> > > > > > > > > > >>>>>> and
> > > > > > > > > > >>>>>>>> annotation. It could be
> > > > > > > > > > >>>>>>>> used in places where we do not have an
> alternative
> > > > > > > > > > >> implementation
> > > > > > > > > > >>>>> yet,
> > > > > > > > > > >>>>>>> but
> > > > > > > > > > >>>>>>>> we clearly want
> > > > > > > > > > >>>>>>>> to indicate that continuing to build on top of
> > these
> > > > > > > > interfaces
> > > > > > > > > > >>> is
> > > > > > > > > > >>>>>>>> discouraged. The area of
> > > > > > > > > > >>>>>>>> impact of deprecating all SourceFunction
> > subclasses
> > > is
> > > > > > > rather
> > > > > > > > > > >>> big,
> > > > > > > > > > >>>>> and
> > > > > > > > > > >>>>>> we
> > > > > > > > > > >>>>>>>> can expect it to
> > > > > > > > > > >>>>>>>> take a while. The hope would be that if in the
> > > > meantime
> > > > > > > > someone
> > > > > > > > > > >>>> finds
> > > > > > > > > > >>>>>>>> themselves using one of
> > > > > > > > > > >>>>>>>> such old APIs, the "soft deprecation" annotation
> > > will
> > > > > be a
> > > > > > > > > > >> clear
> > > > > > > > > > >>>>>>> indication
> > > > > > > > > > >>>>>>>> and encouragement to
> > > > > > > > > > >>>>>>>> work on introducing an alternative FLIP-27-based
> > > > > > > > implementation
> > > > > > > > > > >>>>>> instead.
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>> @Austin, in the FLIP I mentioned above [1], the
> > user
> > > > is
> > > > > > > > > > >> expected
> > > > > > > > > > >>> to
> > > > > > > > > > >>>>>>>> pass a MapFunction<Long,
> > > > > > > > > > >>>>>>>> OUT>
> > > > > > > > > > >>>>>>>> to the generator. I wonder if you could have
> your
> > > > > external
> > > > > > > > > > >> client
> > > > > > > > > > >>>> and
> > > > > > > > > > >>>>>>>> polling logic wrapped in a custom
> > > > > > > > > > >>>>>>>> MapFunction implementation class? Would that
> > answer
> > > > your
> > > > > > > needs
> > > > > > > > > > >> or
> > > > > > > > > > >>>> do
> > > > > > > > > > >>>>>> you
> > > > > > > > > > >>>>>>>> have some
> > > > > > > > > > >>>>>>>> more sophisticated scenario in mind?
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>> [1] https://cwiki.apache.org/confluence/x/9Av1D
> > > > > > > > > > >>>>>>>> Best,
> > > > > > > > > > >>>>>>>> Alexander Fedulov
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>> On Mon, Jun 6, 2022 at 7:08 PM Austin
> > > Cawley-Edwards <
> > > > > > > > > > >>>>>>>> austin.caw...@gmail.com> wrote:
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>>> Thanks for the nice discussion all.
> > > > > > > > > > >>>>>>>>>
> > > > > > > > > > >>>>>>>>> I was recently trying to implement a very
> simple
> > > > > polling
> > > > > > > > > > >> source
> > > > > > > > > > >>>> and
> > > > > > > > > > >>>>>>>>> would've loved a higher-level base to work
> from.
> > > I'm
> > > > > > > > > > >> wondering
> > > > > > > > > > >>> if
> > > > > > > > > > >>>>> in
> > > > > > > > > > >>>>>>>>> addition to the data generator use cases, it
> > would
> > > be
> > > > > > good
> > > > > > > to
> > > > > > > > > > >>>>>> support a
> > > > > > > > > > >>>>>>>>> simple non-parallel polling abstraction to make
> > it
> > > > > easier
> > > > > > > to,
> > > > > > > > > > >>> for
> > > > > > > > > > >>>>>>>> instance,
> > > > > > > > > > >>>>>>>>> start prototyping with data in existing APIs
> > > without
> > > > > > > adding a
> > > > > > > > > > >>>> Kafka
> > > > > > > > > > >>>>>> or
> > > > > > > > > > >>>>>>>> such
> > > > > > > > > > >>>>>>>>> in the middle.
> > > > > > > > > > >>>>>>>>>
> > > > > > > > > > >>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>> Austin
> > > > > > > > > > >>>>>>>>>
> > > > > > > > > > >>>>>>>>> On Mon, Jun 6, 2022 at 10:02 AM tison <
> > > > > > > wander4...@gmail.com>
> > > > > > > > > > >>>>> wrote:
> > > > > > > > > > >>>>>>>>>
> > > > > > > > > > >>>>>>>>>> Well. It's a bit off-topic. For deprecating
> > > > > > SourceFunction
> > > > > > > > > > >> as
> > > > > > > > > > >>>>>> FLIP-27
> > > > > > > > > > >>>>>>>>>> series works go ahead, +1 from my side. It's a
> > > > > > significant
> > > > > > > > > > >>> work
> > > > > > > > > > >>>>>>> towards
> > > > > > > > > > >>>>>>>>> the
> > > > > > > > > > >>>>>>>>>> unification of batch and streaming effort :)
> > > > > > > > > > >>>>>>>>>>
> > > > > > > > > > >>>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>>> tison.
> > > > > > > > > > >>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>
> > > > > > > > > > >>>>>>>>>> tison <wander4...@gmail.com> 于2022年6月6日周一
> > > 21:54写道:
> > > > > > > > > > >>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>> The starting point of the version bump and
> > > removal
> > > > > > > > > > >> question
> > > > > > > > > > >>>> is
> > > > > > > > > > >>>>>> that
> > > > > > > > > > >>>>>>>>>>> downstream projects may experience a tough
> time
> > > to
> > > > > > adapt
> > > > > > > > > > >>> new
> > > > > > > > > > >>>>>>>> interfaces
> > > > > > > > > > >>>>>>>>>>> while Flink keeps in 1.x versions so that
> users
> > > may
> > > > > > > > > > >> expect
> > > > > > > > > > >>> it
> > > > > > > > > > >>>>> as
> > > > > > > > > > >>>>>> an
> > > > > > > > > > >>>>>>>>> easy
> > > > > > > > > > >>>>>>>>>>> task. From my experience, it's really
> challenge
> > > to
> > > > > > > > > > >> maintain
> > > > > > > > > > >>>>>>>>>>> compatibility between multiple versions of
> > Flink
> > > > > while
> > > > > > > > > > >>>>>> significant
> > > > > > > > > > >>>>>>>>>> changes
> > > > > > > > > > >>>>>>>>>>> made but sharing 1.x version series - users
> may
> > > not
> > > > > be
> > > > > > > > > > >>> aware
> > > > > > > > > > >>>>> that
> > > > > > > > > > >>>>>>>> it's
> > > > > > > > > > >>>>>>>>>>> almost a major version bump.
> > > > > > > > > > >>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>>>> tison.
> > > > > > > > > > >>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>> tison <wander4...@gmail.com> 于2022年6月6日周一
> > > 21:51写道:
> > > > > > > > > > >>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>> One question from my side:
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>> As SourceFunction a @Public interface, we
> > cannot
> > > > > > remove
> > > > > > > > > > >> it
> > > > > > > > > > >>>>>> before
> > > > > > > > > > >>>>>>>>> doing
> > > > > > > > > > >>>>>>>>>>>> a major version bump (Flink 2.0).
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>> Of course it's not a blocker to make such
> > > > > deprecation
> > > > > > > > > > >> and
> > > > > > > > > > >>>> let
> > > > > > > > > > >>>>>> the
> > > > > > > > > > >>>>>>>> new
> > > > > > > > > > >>>>>>>>>>>> interface step in. My question is whether we
> > > have
> > > > a
> > > > > > plan
> > > > > > > > > > >>> to
> > > > > > > > > > >>>>>>> finally
> > > > > > > > > > >>>>>>>>>> remove
> > > > > > > > > > >>>>>>>>>>>> the deprecated interfaces, or postpone it
> > until
> > > a
> > > > > > clear
> > > > > > > > > > >>> plan
> > > > > > > > > > >>>>> of
> > > > > > > > > > >>>>>>>> Flink
> > > > > > > > > > >>>>>>>>>> 2.0?
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>>>>> tison.
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>> David Anderson <dander...@apache.org>
> > > > 于2022年6月6日周一
> > > > > > > > > > >>> 21:35写道:
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> David, can you elaborate why you need
> > > watermark
> > > > > > > > > > >>>> generation
> > > > > > > > > > >>>>> in
> > > > > > > > > > >>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>> source
> > > > > > > > > > >>>>>>>>>>>>>> for your data generators?
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> The training exercises should strive to
> > provide
> > > > > > > > > > >> examples
> > > > > > > > > > >>> of
> > > > > > > > > > >>>>>> best
> > > > > > > > > > >>>>>>>>>>>>> practices.
> > > > > > > > > > >>>>>>>>>>>>> If the exercises and their solutions use
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> env.fromSource(source,
> > > > > > > > > > >> WatermarkStrategy.noWatermarks(),
> > > > > > > > > > >>>>>>>>>>>>> "name-of-source")
> > > > > > > > > > >>>>>>>>>>>>>    .map(...)
> > > > > > > > > > >>>>>>>>>>>>>    .assignTimestampsAndWatermarks(...)
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> this will help establish this anti-pattern
> as
> > > the
> > > > > > > > > > >> normal
> > > > > > > > > > >>>> way
> > > > > > > > > > >>>>> of
> > > > > > > > > > >>>>>>>> doing
> > > > > > > > > > >>>>>>>>>>>>> things.
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> Most new Flink users are using a
> KafkaSource
> > > > with a
> > > > > > > > > > >>>>>> noWatermarks
> > > > > > > > > > >>>>>>>>>> strategy
> > > > > > > > > > >>>>>>>>>>>>> and a SimpleStringSchema, followed by a map
> > > that
> > > > > does
> > > > > > > > > > >> the
> > > > > > > > > > >>>>> real
> > > > > > > > > > >>>>>>>>>>>>> deserialization, followed by the real
> > > > watermarking
> > > > > --
> > > > > > > > > > >>>> because
> > > > > > > > > > >>>>>>> they
> > > > > > > > > > >>>>>>>>>> aren't
> > > > > > > > > > >>>>>>>>>>>>> seeing examples that teach how these
> > interfaces
> > > > are
> > > > > > > > > > >> meant
> > > > > > > > > > >>>> to
> > > > > > > > > > >>>>> be
> > > > > > > > > > >>>>>>>> used.
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> When we redo the sources used in training
> > > > > exercises,
> > > > > > I
> > > > > > > > > > >>> want
> > > > > > > > > > >>>>> to
> > > > > > > > > > >>>>>>>> avoid
> > > > > > > > > > >>>>>>>>>>>>> these
> > > > > > > > > > >>>>>>>>>>>>> pitfalls.
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> David
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> On Mon, Jun 6, 2022 at 9:12 AM Konstantin
> > > Knauf <
> > > > > > > > > > >>>>>>> kna...@apache.org
> > > > > > > > > > >>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>> wrote:
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> Hi everyone,
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> very interesting thread. The proposal for
> > > > > > deprecation
> > > > > > > > > > >>>> seems
> > > > > > > > > > >>>>>> to
> > > > > > > > > > >>>>>>>> have
> > > > > > > > > > >>>>>>>>>>>>> sparked
> > > > > > > > > > >>>>>>>>>>>>>> a very important discussion. Do we what
> > users
> > > > > > > > > > >> struggle
> > > > > > > > > > >>>> with
> > > > > > > > > > >>>>>>>>>>>>> specifically?
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> Speaking for myself, when I upgrade
> > > flink-faker
> > > > to
> > > > > > > > > > >> the
> > > > > > > > > > >>>> new
> > > > > > > > > > >>>>>>> Source
> > > > > > > > > > >>>>>>>>> API
> > > > > > > > > > >>>>>>>>>>>>> an
> > > > > > > > > > >>>>>>>>>>>>>> unbounded version of the
> > NumberSequenceSource
> > > > > would
> > > > > > > > > > >>> have
> > > > > > > > > > >>>>> been
> > > > > > > > > > >>>>>>>> all I
> > > > > > > > > > >>>>>>>>>>>>> needed,
> > > > > > > > > > >>>>>>>>>>>>>> but that's just the data generator use
> > case. I
> > > > > > think,
> > > > > > > > > > >>>> that
> > > > > > > > > > >>>>>> one
> > > > > > > > > > >>>>>>>>> could
> > > > > > > > > > >>>>>>>>>> be
> > > > > > > > > > >>>>>>>>>>>>>> solved quite easily. David, can you
> > elaborate
> > > > why
> > > > > > you
> > > > > > > > > > >>>> need
> > > > > > > > > > >>>>>>>>> watermark
> > > > > > > > > > >>>>>>>>>>>>>> generation in the source for your data
> > > > generators?
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> Cheers,
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> Konstantin
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> Am So., 5. Juni 2022 um 17:48 Uhr schrieb
> > > Piotr
> > > > > > > > > > >>> Nowojski
> > > > > > > > > > >>>> <
> > > > > > > > > > >>>>>>>>>>>>>> pnowoj...@apache.org>:
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>> Also +1 to what David has written. But it
> > > > doesn't
> > > > > > > > > > >>> mean
> > > > > > > > > > >>>> we
> > > > > > > > > > >>>>>>>> should
> > > > > > > > > > >>>>>>>>> be
> > > > > > > > > > >>>>>>>>>>>>>> waiting
> > > > > > > > > > >>>>>>>>>>>>>>> indefinitely to deprecate SourceFunction.
> > > > > > > > > > >>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>>>>>>>> Piotrek
> > > > > > > > > > >>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>> niedz., 5 cze 2022 o 16:46 Jark Wu <
> > > > > > > > > > >> imj...@gmail.com
> > > > > > > > > > >>>>
> > > > > > > > > > >>>>>>>>> napisał(a):
> > > > > > > > > > >>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>> +1 to David's point.
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>> Usually, when we deprecate some
> > interfaces,
> > > we
> > > > > > > > > > >>> should
> > > > > > > > > > >>>>>> point
> > > > > > > > > > >>>>>>>>> users
> > > > > > > > > > >>>>>>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>> use
> > > > > > > > > > >>>>>>>>>>>>>>>> the recommended alternatives.
> > > > > > > > > > >>>>>>>>>>>>>>>> However, implementing the new Source
> > > interface
> > > > > > > > > > >> for
> > > > > > > > > > >>>> some
> > > > > > > > > > >>>>>>>> simple
> > > > > > > > > > >>>>>>>>>>>>>> scenarios
> > > > > > > > > > >>>>>>>>>>>>>>> is
> > > > > > > > > > >>>>>>>>>>>>>>>> too challenging and complex.
> > > > > > > > > > >>>>>>>>>>>>>>>> We also found it isn't easy to push the
> > > > internal
> > > > > > > > > > >>>>>> connector
> > > > > > > > > > >>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>> upgrade
> > > > > > > > > > >>>>>>>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>>>> the new Source because
> > > > > > > > > > >>>>>>>>>>>>>>>> "FLIP-27 are hard to understand, while
> > > > > > > > > > >>> SourceFunction
> > > > > > > > > > >>>>> is
> > > > > > > > > > >>>>>>>> easy".
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>> +1 to make implementing a simple Source
> > > easier
> > > > > > > > > > >>> before
> > > > > > > > > > >>>>>>>>> deprecating
> > > > > > > > > > >>>>>>>>>>>>>>>> SourceFunction.
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>>>>>>>>> Jark
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>> On Sun, 5 Jun 2022 at 07:29, Jingsong
> Lee
> > <
> > > > > > > > > > >>>>>>>>>> lzljs3620...@apache.org
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>> wrote:
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>> +1 to David and Ingo.
> > > > > > > > > > >>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>> Before deprecate and remove
> > SourceFunction,
> > > > we
> > > > > > > > > > >>>> should
> > > > > > > > > > >>>>>>> have
> > > > > > > > > > >>>>>>>>> some
> > > > > > > > > > >>>>>>>>>>>>>> easier
> > > > > > > > > > >>>>>>>>>>>>>>>> APIs
> > > > > > > > > > >>>>>>>>>>>>>>>>> to wrap new Source, the cost to write a
> > new
> > > > > > > > > > >>> Source
> > > > > > > > > > >>>> is
> > > > > > > > > > >>>>>> too
> > > > > > > > > > >>>>>>>>> high
> > > > > > > > > > >>>>>>>>>>>>> now.
> > > > > > > > > > >>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>> Ingo Bürk <airbla...@apache.org
> > >于2022年6月5日
> > > > > > > > > > >>>>> 周日05:32写道:
> > > > > > > > > > >>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>> I +1 everything David said. The new
> > Source
> > > > > > > > > > >> API
> > > > > > > > > > >>>>> raised
> > > > > > > > > > >>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>> complexity
> > > > > > > > > > >>>>>>>>>>>>>>>>>> significantly. It's great to have
> such a
> > > > > > > > > > >> rich,
> > > > > > > > > > >>>>>> powerful
> > > > > > > > > > >>>>>>>> API
> > > > > > > > > > >>>>>>>>>>>>> that
> > > > > > > > > > >>>>>>>>>>>>>> can
> > > > > > > > > > >>>>>>>>>>>>>>> do
> > > > > > > > > > >>>>>>>>>>>>>>>>>> everything, but in the process we lost
> > the
> > > > > > > > > > >>>> ability
> > > > > > > > > > >>>>> to
> > > > > > > > > > >>>>>>>>> onboard
> > > > > > > > > > >>>>>>>>>>>>>> people
> > > > > > > > > > >>>>>>>>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>>>>>> the APIs.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>> Best
> > > > > > > > > > >>>>>>>>>>>>>>>>>> Ingo
> > > > > > > > > > >>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>> On 04.06.22 21:21, David Anderson
> wrote:
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> I'm in favor of this, but I think we
> > need
> > > > > > > > > > >> to
> > > > > > > > > > >>>> make
> > > > > > > > > > >>>>>> it
> > > > > > > > > > >>>>>>>>> easier
> > > > > > > > > > >>>>>>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>>>>> implement
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> data generators and test sources. As
> > > things
> > > > > > > > > > >>>> stand
> > > > > > > > > > >>>>>> in
> > > > > > > > > > >>>>>>>>> 1.15,
> > > > > > > > > > >>>>>>>>>>>>> unless
> > > > > > > > > > >>>>>>>>>>>>>>> you
> > > > > > > > > > >>>>>>>>>>>>>>>>> can
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> be satisfied with using a
> > > > > > > > > > >>> NumberSequenceSource
> > > > > > > > > > >>>>>>> followed
> > > > > > > > > > >>>>>>>>> by
> > > > > > > > > > >>>>>>>>>> a
> > > > > > > > > > >>>>>>>>>>>>> map,
> > > > > > > > > > >>>>>>>>>>>>>>>>> things
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> get quite complicated. I looked into
> > > > > > > > > > >>> reworking
> > > > > > > > > > >>>>> the
> > > > > > > > > > >>>>>>> data
> > > > > > > > > > >>>>>>>>>>>>>> generators
> > > > > > > > > > >>>>>>>>>>>>>>>> used
> > > > > > > > > > >>>>>>>>>>>>>>>>>> in
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> the training exercises, and got
> > > discouraged
> > > > > > > > > > >>> by
> > > > > > > > > > >>>>> the
> > > > > > > > > > >>>>>>>> amount
> > > > > > > > > > >>>>>>>>>> of
> > > > > > > > > > >>>>>>>>>>>>> work
> > > > > > > > > > >>>>>>>>>>>>>>>>>> involved.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> (The sources used in the training
> want
> > to
> > > > > > > > > > >> be
> > > > > > > > > > >>>>>>> unbounded,
> > > > > > > > > > >>>>>>>>> and
> > > > > > > > > > >>>>>>>>>>>>> need
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> watermarking in the sources, which
> > means
> > > > > > > > > > >> that
> > > > > > > > > > >>>>> using
> > > > > > > > > > >>>>>>>>>>>>>>>>> NumberSequenceSource
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> isn't an option.)
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> I think the proposed deprecation will
> > be
> > > > > > > > > > >>> better
> > > > > > > > > > >>>>>>>> received
> > > > > > > > > > >>>>>>>>> if
> > > > > > > > > > >>>>>>>>>>>>> it
> > > > > > > > > > >>>>>>>>>>>>>> can
> > > > > > > > > > >>>>>>>>>>>>>>> be
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> accompanied by something that makes
> > > > > > > > > > >>>> implementing
> > > > > > > > > > >>>>> a
> > > > > > > > > > >>>>>>>> simple
> > > > > > > > > > >>>>>>>>>>>>> Source
> > > > > > > > > > >>>>>>>>>>>>>>>> easier
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> than it is now. People are continuing
> > to
> > > > > > > > > > >>>>> implement
> > > > > > > > > > >>>>>>> new
> > > > > > > > > > >>>>>>>>>>>>>>>> SourceFunctions
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> because the interfaces defined by
> > FLIP-27
> > > > > > > > > > >> are
> > > > > > > > > > >>>>> hard
> > > > > > > > > > >>>>>> to
> > > > > > > > > > >>>>>>>>>>>>> understand,
> > > > > > > > > > >>>>>>>>>>>>>>>> while
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> SourceFunction is easy. Alex, I
> believe
> > > you
> > > > > > > > > > >>>> were
> > > > > > > > > > >>>>>>>> looking
> > > > > > > > > > >>>>>>>>>> into
> > > > > > > > > > >>>>>>>>>>>>>>>>>> implementing
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> an easier-to-use building block that
> > > could
> > > > > > > > > > >> be
> > > > > > > > > > >>>>> used
> > > > > > > > > > >>>>>> in
> > > > > > > > > > >>>>>>>>>>>>> situations
> > > > > > > > > > >>>>>>>>>>>>>>> like
> > > > > > > > > > >>>>>>>>>>>>>>>>>> this.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> Can we get something like that in
> place
> > > > > > > > > > >>> first?
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> David
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>> On Fri, Jun 3, 2022 at 4:52 PM Jing
> Ge
> > <
> > > > > > > > > > >>>>>>>>> j...@ververica.com
> > > > > > > > > > >>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> wrote:
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> Hi,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> Thanks Alex for driving this!
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> +1 To give the Flink developers,
> > > > > > > > > > >> especially
> > > > > > > > > > >>>>>>> Connector
> > > > > > > > > > >>>>>>>>>>>>> developers
> > > > > > > > > > >>>>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>>>> clear
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> signal that the new Source API is
> > > > > > > > > > >>> recommended
> > > > > > > > > > >>>>>>>> according
> > > > > > > > > > >>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>>> FLIP-27,
> > > > > > > > > > >>>>>>>>>>>>>>>> we
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> should mark them as deprecated.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> There are some open questions to
> > > discuss:
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 1. Do we need to mark all
> > > > > > > > > > >>>>> subinterfaces/subclasses
> > > > > > > > > > >>>>>>> as
> > > > > > > > > > >>>>>>>>>>>>>> deprecated?
> > > > > > > > > > >>>>>>>>>>>>>>>> e.g.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> FromElementsFunction, etc. there are
> > > many.
> > > > > > > > > > >>>> What
> > > > > > > > > > >>>>>> are
> > > > > > > > > > >>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>> replacements?
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 2. Do we need to mark all subclasses
> > > that
> > > > > > > > > > >>> have
> > > > > > > > > > >>>>>>>>> replacement
> > > > > > > > > > >>>>>>>>>>>>> as
> > > > > > > > > > >>>>>>>>>>>>>>>>>> deprecated?
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> e.g. ExternallyInducedSource whose
> > > > > > > > > > >>> replacement
> > > > > > > > > > >>>>>>> class,
> > > > > > > > > > >>>>>>>>> if I
> > > > > > > > > > >>>>>>>>>>>>> am
> > > > > > > > > > >>>>>>>>>>>>>> not
> > > > > > > > > > >>>>>>>>>>>>>>>>>> mistaken,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> ExternallyInducedSourceReader is
> > > > > > > > > > >>> @Experimental
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 3. Do we need to mark all related
> test
> > > > > > > > > > >>> utility
> > > > > > > > > > >>>>>>> classes
> > > > > > > > > > >>>>>>>>> as
> > > > > > > > > > >>>>>>>>>>>>>>>> deprecated?
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> I think it might make sense to
> create
> > an
> > > > > > > > > > >>>>> umbrella
> > > > > > > > > > >>>>>>>> ticket
> > > > > > > > > > >>>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>> cover
> > > > > > > > > > >>>>>>>>>>>>>>>> all
> > > > > > > > > > >>>>>>>>>>>>>>>>> of
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> these with the following process:
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 1. Mark SourceFunction as deprecated
> > > asap.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 2. Mark subinterfaces and subclasses
> > as
> > > > > > > > > > >>>>>> deprecated,
> > > > > > > > > > >>>>>>> if
> > > > > > > > > > >>>>>>>>>>>>> there are
> > > > > > > > > > >>>>>>>>>>>>>>>>>> graduated
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> replacements. Good example is that
> > > > > > > > > > >>> KafkaSource
> > > > > > > > > > >>>>>>>> replaced
> > > > > > > > > > >>>>>>>>>>>>>>>> KafkaConsumer
> > > > > > > > > > >>>>>>>>>>>>>>>>>> which
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> has been marked as deprecated.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 3. Do not mark subinterfaces and
> > > > > > > > > > >> subclasses
> > > > > > > > > > >>> as
> > > > > > > > > > >>>>>>>>> deprecated,
> > > > > > > > > > >>>>>>>>>>>>> if
> > > > > > > > > > >>>>>>>>>>>>>>>>>> replacement
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> classes are still experimental,
> check
> > if
> > > > > > > > > > >> it
> > > > > > > > > > >>> is
> > > > > > > > > > >>>>>> time
> > > > > > > > > > >>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>> graduate
> > > > > > > > > > >>>>>>>>>>>>>>>> them.
> > > > > > > > > > >>>>>>>>>>>>>>>>>> After
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> graduation, go to step 2. It might
> > take
> > > a
> > > > > > > > > > >>>> while
> > > > > > > > > > >>>>>> for
> > > > > > > > > > >>>>>>>>>>>>> graduation.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 4. Do not mark subinterfaces and
> > > > > > > > > > >> subclasses
> > > > > > > > > > >>> as
> > > > > > > > > > >>>>>>>>> deprecated,
> > > > > > > > > > >>>>>>>>>>>>> if
> > > > > > > > > > >>>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> replacement classes are experimental
> > and
> > > > > > > > > > >> are
> > > > > > > > > > >>>> too
> > > > > > > > > > >>>>>>> young
> > > > > > > > > > >>>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>>>> graduate.
> > > > > > > > > > >>>>>>>>>>>>>>>> We
> > > > > > > > > > >>>>>>>>>>>>>>>>>> have
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> to wait. But in this case we could
> > > create
> > > > > > > > > > >>> new
> > > > > > > > > > >>>>>>> tickets
> > > > > > > > > > >>>>>>>>>> under
> > > > > > > > > > >>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>>> umbrella
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> ticket.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 5. Do not mark subinterfaces and
> > > > > > > > > > >> subclasses
> > > > > > > > > > >>> as
> > > > > > > > > > >>>>>>>>> deprecated,
> > > > > > > > > > >>>>>>>>>>>>> if
> > > > > > > > > > >>>>>>>>>>>>>>> there
> > > > > > > > > > >>>>>>>>>>>>>>>> is
> > > > > > > > > > >>>>>>>>>>>>>>>>>> no
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> replacement at all. We have to
> create
> > > new
> > > > > > > > > > >>>>> tickets
> > > > > > > > > > >>>>>>> and
> > > > > > > > > > >>>>>>>>> wait
> > > > > > > > > > >>>>>>>>>>>>> until
> > > > > > > > > > >>>>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>>> new
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> implementation has been done and
> > > > > > > > > > >> graduated.
> > > > > > > > > > >>> It
> > > > > > > > > > >>>>>> will
> > > > > > > > > > >>>>>>>>> take a
> > > > > > > > > > >>>>>>>>>>>>>> longer
> > > > > > > > > > >>>>>>>>>>>>>>>>> time,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> roughly 1,5 years.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> 6. For test classes, we could follow
> > the
> > > > > > > > > > >>> same
> > > > > > > > > > >>>>>> rule.
> > > > > > > > > > >>>>>>>> But
> > > > > > > > > > >>>>>>>>> I
> > > > > > > > > > >>>>>>>>>>>>> think
> > > > > > > > > > >>>>>>>>>>>>>>> for
> > > > > > > > > > >>>>>>>>>>>>>>>>> some
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> cases, we could consider doing the
> > > > > > > > > > >>> replacement
> > > > > > > > > > >>>>>>>> directly
> > > > > > > > > > >>>>>>>>>>>>> without
> > > > > > > > > > >>>>>>>>>>>>>>>> going
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> through the deprecation phase.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> When we look back on all of these,
> we
> > > can
> > > > > > > > > > >>>>> realize
> > > > > > > > > > >>>>>> it
> > > > > > > > > > >>>>>>>> is
> > > > > > > > > > >>>>>>>>> a
> > > > > > > > > > >>>>>>>>>>>>> big
> > > > > > > > > > >>>>>>>>>>>>>> epic
> > > > > > > > > > >>>>>>>>>>>>>>>>> (even
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> bigger than an epic). It needs
> someone
> > > to
> > > > > > > > > > >>>> drive
> > > > > > > > > > >>>>> it
> > > > > > > > > > >>>>>>> and
> > > > > > > > > > >>>>>>>>>> keep
> > > > > > > > > > >>>>>>>>>>>>>> focus
> > > > > > > > > > >>>>>>>>>>>>>>> on
> > > > > > > > > > >>>>>>>>>>>>>>>>> it
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> continuously with support from the
> > > > > > > > > > >> community
> > > > > > > > > > >>>> and
> > > > > > > > > > >>>>>>> push
> > > > > > > > > > >>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>> development
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> towards the new Source API of
> FLIP-27.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> If we could have consensus for this,
> > > Alex
> > > > > > > > > > >>>> and I
> > > > > > > > > > >>>>>>> could
> > > > > > > > > > >>>>>>>>>>>>> create
> > > > > > > > > > >>>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>>>>>> umbrella
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> ticket to kick it off.
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> Best regards,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> Jing
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> On Fri, Jun 3, 2022 at 3:54 PM
> > Alexander
> > > > > > > > > > >>>>> Fedulov <
> > > > > > > > > > >>>>>>>>>>>>>>>>>> alexan...@ververica.com>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> wrote:
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> Hi everyone,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> I would like to start the
> discussion
> > > > > > > > > > >> about
> > > > > > > > > > >>>>>> marking
> > > > > > > > > > >>>>>>>>>>>>>>>>> SourceFunction-based
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> interfaces as deprecated. With the
> > > > > > > > > > >> FLIP-27
> > > > > > > > > > >>>> APIs
> > > > > > > > > > >>>>>>>>> becoming
> > > > > > > > > > >>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>> new
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> standard,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> the old ones have to be eventually
> > > phased
> > > > > > > > > > >>>> out.
> > > > > > > > > > >>>>>>>> Although
> > > > > > > > > > >>>>>>>>>>>>> this
> > > > > > > > > > >>>>>>>>>>>>>>> state
> > > > > > > > > > >>>>>>>>>>>>>>>> is
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> well
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> known within the community and no
> new
> > > > > > > > > > >>>>> connectors
> > > > > > > > > > >>>>>>>> based
> > > > > > > > > > >>>>>>>>> on
> > > > > > > > > > >>>>>>>>>>>>> the
> > > > > > > > > > >>>>>>>>>>>>>> old
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> interfaces can be accepted into the
> > > > > > > > > > >>> project,
> > > > > > > > > > >>>>> the
> > > > > > > > > > >>>>>>>>>> footprint
> > > > > > > > > > >>>>>>>>>>>>> of
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> SourceFunction in the user code
> still
> > > > > > > > > > >> keeps
> > > > > > > > > > >>>>>> growing
> > > > > > > > > > >>>>>>>>>>>>> (primarily
> > > > > > > > > > >>>>>>>>>>>>>>> for
> > > > > > > > > > >>>>>>>>>>>>>>>>> data
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> generators and test utilities). I
> > > believe
> > > > > > > > > > >>> it
> > > > > > > > > > >>>> is
> > > > > > > > > > >>>>>>> best
> > > > > > > > > > >>>>>>>> to
> > > > > > > > > > >>>>>>>>>>>>> mark
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>> SourceFunction
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> as deprecated as soon as possible.
> > What
> > > > > > > > > > >> do
> > > > > > > > > > >>>> you
> > > > > > > > > > >>>>>>> think?
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> Best,
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>> Alexander Fedulov
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>> --
> > > > > > > > > > >>>>>>>>>>>>>> https://twitter.com/snntrable
> > > > > > > > > > >>>>>>>>>>>>>> https://github.com/knaufk
> > > > > > > > > > >>>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>>>
> > > > > > > > > > >>>>>>>>>>
> > > > > > > > > > >>>>>>>>>
> > > > > > > > > > >>>>>>>>
> > > > > > > > > > >>>>>>>
> > > > > > > > > > >>>>>>
> > > > > > > > > > >>>>>
> > > > > > > > > > >>>>
> > > > > > > > > > >>>
> > > > > > > > > > >>
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > https://twitter.com/snntrable
> > > > > > > > https://github.com/knaufk
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to