Hi Becket,

> It is a basic rule of public API that anything exposed by a public
interface should also be public.

I agree with this in general. Did you get an overview of where we currently
violate this? Is this something that the Arc42 architecture tests could
test for so that as a first measure we don't introduce more occurrences
(cc @Ingo).

Maybe its justified to make a pass over all of these occurrences and
resolve these occurrences one way or another either making the
members/parameters @PublicEvoling or actually making a class/method
@Internal even if its was @PublicEvoling before. I think, this could be the
better option than having @PublicEvolving classes/methods that really
aren't.

Cheers,

Konstantin

Am Fr., 13. Jan. 2023 um 17:02 Uhr schrieb Becket Qin <becket....@gmail.com
>:

> Hi Dawid,
>
> Thanks for the reply. I am currently looking at the Beam Flink runner, and
> there are quite some hacks the Beam runner has to do in order to deal with
> the backwards incompatible changes in AbstractStreamOperator and some of
> the classes exposed by it. Regardless of what we think, the fact is that
> AbstractStreamOperator is marked as PublicEvolving today, and our users use
> it. It is a basic rule of public API that anything exposed by a public
> interface should also be public. This is the direct motivation of this
> FLIP.
>
> Regarding the StreamTask / StreamConfig exposure, if you look at the
> StreamOperatorFactory which is also a PublicEvolving class, it actually
> exposes the StreamTask, StreamConfig as well as some other classes in the
> StreamOperatorParameters. So these classes are already exposed in multiple
> public APIs.
>
> Keeping our public API stability guarantee is really fundamental and
> critical to the users. With the current status of inconsistent API
> stability annotations, I don't see how can we assure of that. From what I
> can see, accidental backwards incompatible changes is likely going to keep
> happening. So I'd say let's see how to fix forward instead of doing
> nothing.
>
> BTW, Initially I thought this is just an accidental mismatch, but after
> further exam, it looks that it is a bigger issue. I guess one of the
> reasons we end up in this situation is that we haven't really thought it
> through regarding the boundary between framework and user space, i.e. what
> framework primitives we want to expose to the users. So instead we just
> expose a bunch of internal things and hope users only use the "stable" part
> of them.
>
> Thanks,
>
> Jiangjie (Becket) Qin
>
>
> On Fri, Jan 13, 2023 at 7:28 PM Dawid Wysakowicz <dwysakow...@apache.org>
> wrote:
>
> > Hi Becket,
> >
> > May I ask what is the motivation for the change?
> >
> > I'm really skeptical about making any of those classes `Public` or
> > `PublicEvolving`. As far as I am concerned there is no agreement in the
> > community if StreamOperator is part of the `Public(Evolving)` API. At
> > least I think it should not. I understand `AbstractStreamOperator` was
> > marked with `PublicEvolving`, but I am really not convinced it was the
> > right decision.
> >
> > The listed classes are not the only classes exposed to
> > `AbstractStreamOperator` that are `Internal` that break the consistency
> > and I am sure there is no question those should remain `Internal` such
> > as e.g. StreamTask, StreamConfig, StreamingRuntimeContext and many more.
> >
> > As it stands I am strongly against giving any additional guarantees on
> > API stability to the classes there unless there is a good motivation for
> > a given feature and we're sure this is the best way to go forward.
> >
> > Thus I'm inclined to go with -1 on any proposal on changing annotations
> > for the sake of matching the one on `AbstractStreamOperator`. I might be
> > convinced to support requests to give better guarantees for well
> > motivated features that are now internal though.
> >
> > Best,
> >
> > Dawid
> >
> > On 12/01/2023 10:20, Becket Qin wrote:
> > > Hi flink devs,
> > >
> > > I'd like to start a discussion thread for FLIP-286[1].
> > >
> > > As a recap, currently while AbstractStreamOperator is a class marked as
> > > @PublicEvolving, some classes exposed via its methods / fields are
> > > marked as @Internal. This FLIP wants to fix this inconsistency of
> > > stability / scope annotation.
> > >
> > > Comments are welcome!
> > >
> > > Thanks,
> > >
> > > Jiangjie (Becket) Qin
> > >
> > > [1]
> > >
> >
> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=240880841
> > >
> >
>


-- 
https://twitter.com/snntrable
https://github.com/knaufk

Reply via email to