You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by Greg Hogan <co...@greghogan.com> on 2016/11/22 17:56:44 UTC

[DISCUSS] @Public libraries

Hi all,

Should stable APIs in Flink's CEP, ML, and Gelly libraries be annotated
@Public or restricted to use of @PublicEvolving?

We would ensure that library APIs do not add restrictions to the core APIs.
Libraries could use @PublicEvolving or @Internal core APIs within @Public
or @PublicEvolving components as long as the functionality could be adapted
or rewritten as necessary. An example: CombineHint is @Internal. Gelly
could use CombineHint in a @Public method but could not accept CombineHint
as a parameter to a @Public method.

Greg

Re: [DISCUSS] @Public libraries

Posted by Robert Metzger <rm...@apache.org>.
In the initial discussion / proposal for interface annotations we decided
to annotate only the very core APIs with @Public and give the libraries
more freedom to evolve over time.
I think we should not have a general rule for the libraries and decide this
case-by-case. If you feel that Gelly is mature enough that methods become
@Public, we can do that. For CEP and ML, I have the feeling that bigger
refactorings might take place, so I would not annotate.

Maybe a good rule of thumb for making an interface as @Public is when users
are complaining that it broke between releases.
If a library doesn't have many users yet, there is no point in restricting
yourself too early.

The @PublicEvolving annotation was mainly added to be used inside a class
marked @Public.
If a class is not annotated at all, it is not considered stable.
However, sometimes you want to mark something within a @Public class as
@Internal or @PublicEvolving (=might change in the future, but is
considered for public use for now).
So marking a class as @PublicEvolving doesn't do anything for the "japicmp"
tool.






On Wed, Nov 23, 2016 at 5:21 PM, Theodore Vasiloudis <
theodoros.vasiloudis@gmail.com> wrote:

> What Till said is true for FlinkML, until all the moving parts are in place
> there's not much point in annotating any as Public. The Spark project has
> the @Experimental tag IIRC, that would fit our case better.
>
> On Wed, Nov 23, 2016 at 4:09 PM, Till Rohrmann <tr...@apache.org>
> wrote:
>
> > I think in general annotating library methods/classes is a good idea. The
> > question is just which APIs are going to be marked stable.
> >
> > In the past we've seen that we might have marked some of Flink's APIs
> > stable too early. As a consequence we have to carry them along for quite
> > some time (at the very least until Flink 2.0).
> >
> > If we now come to the conclusion that the library APIs are not yet stable
> > enough to mark them Public, then we will probably mark a lot of the API
> > PublicEvolving which adds only little value for the user.
> >
> > Cheers,
> > Till
> >
> > On Wed, Nov 23, 2016 at 2:25 PM, Aljoscha Krettek <al...@apache.org>
> > wrote:
> >
> > > I would be for also annotating library methods/classes. Maybe Robert
> has
> > a
> > > stronger opinion on this because he introduced these annotations.
> > >
> > > On Tue, 22 Nov 2016 at 18:56 Greg Hogan <co...@greghogan.com> wrote:
> > >
> > > > Hi all,
> > > >
> > > > Should stable APIs in Flink's CEP, ML, and Gelly libraries be
> annotated
> > > > @Public or restricted to use of @PublicEvolving?
> > > >
> > > > We would ensure that library APIs do not add restrictions to the core
> > > APIs.
> > > > Libraries could use @PublicEvolving or @Internal core APIs within
> > @Public
> > > > or @PublicEvolving components as long as the functionality could be
> > > adapted
> > > > or rewritten as necessary. An example: CombineHint is @Internal.
> Gelly
> > > > could use CombineHint in a @Public method but could not accept
> > > CombineHint
> > > > as a parameter to a @Public method.
> > > >
> > > > Greg
> > > >
> > >
> >
>

Re: [DISCUSS] @Public libraries

Posted by Theodore Vasiloudis <th...@gmail.com>.
What Till said is true for FlinkML, until all the moving parts are in place
there's not much point in annotating any as Public. The Spark project has
the @Experimental tag IIRC, that would fit our case better.

On Wed, Nov 23, 2016 at 4:09 PM, Till Rohrmann <tr...@apache.org> wrote:

> I think in general annotating library methods/classes is a good idea. The
> question is just which APIs are going to be marked stable.
>
> In the past we've seen that we might have marked some of Flink's APIs
> stable too early. As a consequence we have to carry them along for quite
> some time (at the very least until Flink 2.0).
>
> If we now come to the conclusion that the library APIs are not yet stable
> enough to mark them Public, then we will probably mark a lot of the API
> PublicEvolving which adds only little value for the user.
>
> Cheers,
> Till
>
> On Wed, Nov 23, 2016 at 2:25 PM, Aljoscha Krettek <al...@apache.org>
> wrote:
>
> > I would be for also annotating library methods/classes. Maybe Robert has
> a
> > stronger opinion on this because he introduced these annotations.
> >
> > On Tue, 22 Nov 2016 at 18:56 Greg Hogan <co...@greghogan.com> wrote:
> >
> > > Hi all,
> > >
> > > Should stable APIs in Flink's CEP, ML, and Gelly libraries be annotated
> > > @Public or restricted to use of @PublicEvolving?
> > >
> > > We would ensure that library APIs do not add restrictions to the core
> > APIs.
> > > Libraries could use @PublicEvolving or @Internal core APIs within
> @Public
> > > or @PublicEvolving components as long as the functionality could be
> > adapted
> > > or rewritten as necessary. An example: CombineHint is @Internal. Gelly
> > > could use CombineHint in a @Public method but could not accept
> > CombineHint
> > > as a parameter to a @Public method.
> > >
> > > Greg
> > >
> >
>

Re: [DISCUSS] @Public libraries

Posted by Till Rohrmann <tr...@apache.org>.
I think in general annotating library methods/classes is a good idea. The
question is just which APIs are going to be marked stable.

In the past we've seen that we might have marked some of Flink's APIs
stable too early. As a consequence we have to carry them along for quite
some time (at the very least until Flink 2.0).

If we now come to the conclusion that the library APIs are not yet stable
enough to mark them Public, then we will probably mark a lot of the API
PublicEvolving which adds only little value for the user.

Cheers,
Till

On Wed, Nov 23, 2016 at 2:25 PM, Aljoscha Krettek <al...@apache.org>
wrote:

> I would be for also annotating library methods/classes. Maybe Robert has a
> stronger opinion on this because he introduced these annotations.
>
> On Tue, 22 Nov 2016 at 18:56 Greg Hogan <co...@greghogan.com> wrote:
>
> > Hi all,
> >
> > Should stable APIs in Flink's CEP, ML, and Gelly libraries be annotated
> > @Public or restricted to use of @PublicEvolving?
> >
> > We would ensure that library APIs do not add restrictions to the core
> APIs.
> > Libraries could use @PublicEvolving or @Internal core APIs within @Public
> > or @PublicEvolving components as long as the functionality could be
> adapted
> > or rewritten as necessary. An example: CombineHint is @Internal. Gelly
> > could use CombineHint in a @Public method but could not accept
> CombineHint
> > as a parameter to a @Public method.
> >
> > Greg
> >
>

Re: [DISCUSS] @Public libraries

Posted by Aljoscha Krettek <al...@apache.org>.
I would be for also annotating library methods/classes. Maybe Robert has a
stronger opinion on this because he introduced these annotations.

On Tue, 22 Nov 2016 at 18:56 Greg Hogan <co...@greghogan.com> wrote:

> Hi all,
>
> Should stable APIs in Flink's CEP, ML, and Gelly libraries be annotated
> @Public or restricted to use of @PublicEvolving?
>
> We would ensure that library APIs do not add restrictions to the core APIs.
> Libraries could use @PublicEvolving or @Internal core APIs within @Public
> or @PublicEvolving components as long as the functionality could be adapted
> or rewritten as necessary. An example: CombineHint is @Internal. Gelly
> could use CombineHint in a @Public method but could not accept CombineHint
> as a parameter to a @Public method.
>
> Greg
>