I don't have an overview of all the holes in our public API surface at the
moment. It would be great if there's some tool to do a scan.

In addition to fixing the annotation consistency formally, I think it is
equally, if not more, important to see whether the public APIs we expose
tell a good story. For example, if we say StreamConfig should be internal,
some fair questions to ask is why our own AbstractStreamOperator needs it?
Why does not a user-defined operator need it? Is there something in the
StreamConfig we should expose as a public interface if not the entire class?

Thanks,

Jiangjie (Becket) Qin

On Sat, Jan 14, 2023 at 5:36 AM Konstantin Knauf <kna...@apache.org> wrote:

> 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