FYI: The API and binary compatibility check has been activated [1].

[1] https://issues.apache.org/jira/browse/FLINK-17844

Cheers,
Till

On Mon, May 18, 2020 at 1:11 PM Chesnay Schepler <ches...@apache.org> wrote:

> yes
>
> On 18/05/2020 13:05, Piotr Nowojski wrote:
> > How would we enforce this change? That we would enable different, more
> strict compatibility checks on the `release-1.x` branches?
> >
> > Piotrek
> >
> >> On 16 May 2020, at 08:33, Congxian Qiu <qcx978132...@gmail.com> wrote:
> >>
> >> Sorry for the late jump in.
> >>
> >> +1 to keep the compatibility of @PublicEvolving between minor
> >> releases(x.y.a -> x.y.b), as a user I always think this as a bug-fix
> >> release, break the compatibility between minor releases may give users a
> >> surprise.
> >>
> >> As the previous emails said, how and when will a @PublicEvolving
> >> become @Public, and I'm not sure if we can have a technical solution to
> >> keep such a rule. (In my opinion, check such things -- change
> >> @PublicEvolving to @Public -- manually may not so easy)
> >>
> >> Best
> >> Congxian
> >>
> >>
> >> Till Rohrmann <trohrm...@apache.org> 于2020年5月15日周五 下午9:18写道:
> >>
> >>> The vote thread can be found here
> >>>
> >>>
> https://lists.apache.org/thread.html/rc58099fb0e31d0eac951a7bbf7f8bda8b7b65c9ed0c04622f5333745%40%3Cdev.flink.apache.org%3E
> >>> .
> >>>
> >>> Cheers,
> >>> Till
> >>>
> >>> On Fri, May 15, 2020 at 3:03 PM Till Rohrmann <trohrm...@apache.org>
> >>> wrote:
> >>>
> >>>> I completely agree that there are many other aspect of our guarantees
> and
> >>>> processes around the @Public and @PublicEvolving classes which need
> to be
> >>>> discussed and properly defined. For the sake of keeping this
> discussion
> >>>> thread narrowly scoped, I would suggest to start a separate discussion
> >>>> about the following points (not exhaustive):
> >>>>
> >>>> - What should be annotated with @Public and @PublicEvolving?
> >>>> - Process for transforming @PublicEvolving into @Public; How to ensure
> >>>> that @PublicEvolving will eventually be promoted to @Public?
> >>>> - Process of retiring a @Public/@PublicEvolving API
> >>>>
> >>>> I will start a vote thread about the change I proposed here which is
> to
> >>>> ensure API and binary compatibility for @PublicEvolving classes
> between
> >>>> bugfix releases (x.y.z and x.y.u).
> >>>>
> >>>> Cheers,
> >>>> Till
> >>>>
> >>>> On Fri, May 15, 2020 at 6:33 AM Zhu Zhu <reed...@gmail.com> wrote:
> >>>>
> >>>>> +1 for "API + binary compatibility for @PublicEvolving classes for
> all
> >>> bug
> >>>>> fix
> >>>>> releases in a minor release (x.y.z is compatible to x.y.u)"
> >>>>>
> >>>>> This @PublicEnvolving would then be a hard limit to changes.
> >>>>> So it's important to rethink the policy towards using it, as Stephan
> >>>>> proposed.
> >>>>>
> >>>>> I think any Flink interfaces that are visible to users should be
> >>>>> explicitly
> >>>>> marked as @Public or @PublicEnvolving.
> >>>>> Any other interfaces should not be marked as
> @Public/@PublicEnvolving.
> >>>>> This would be essential for us to check whether we are breaking any
> user
> >>>>> faced interfaces unexpectedly.
> >>>>> The only exception would be the case that we had to expose a
> >>> method/class
> >>>>> due to implementation limitations, it should be explicitly marked it
> >>>>> as @Internal.
> >>>>>
> >>>>> Thanks,
> >>>>> Zhu Zhu
> >>>>>
> >>>>> Yun Tang <myas...@live.com> 于2020年5月15日周五 上午11:41写道:
> >>>>>
> >>>>>> +1 for this idea, and I also like Xintong's suggestion to make it
> >>>>>> explicitly when the @PublicEvolving API could upgrade to @Public
> API.
> >>>>>> If we have the rule to upgrade API stable level but not define the
> >>> clear
> >>>>>> timeline, I'm afraid not everyone have the enthusiasm to upgrade
> this.
> >>>>>>
> >>>>>> The minor suggestion is that I think two major release (which is
> x.y.0
> >>>>> as
> >>>>>> Chesnay clarified) might be a bit quick. From the release history
> [1],
> >>>>>> Flink bump major version every 3 ~ 6 months and two major release
> gap
> >>>>>> could only be at least half a year.
> >>>>>> I think half a year might be a bit too frequent for users to collect
> >>>>>> enough feedbacks, and upgrading API stable level every 3 major
> >>> versions
> >>>>>> should be better.
> >>>>>>
> >>>>>> [1] https://flink.apache.org/downloads.html#flink
> >>>>>>
> >>>>>> Best
> >>>>>> Yun Tang
> >>>>>>
> >>>>>>
> >>>>>> ________________________________
> >>>>>> From: Xintong Song <tonysong...@gmail.com>
> >>>>>> Sent: Friday, May 15, 2020 11:04
> >>>>>> To: dev <dev@flink.apache.org>
> >>>>>> Subject: Re: [DISCUSS] Stability guarantees for @PublicEvolving
> >>> classes
> >>>>>> ### Documentation on API compatibility policies
> >>>>>>
> >>>>>> Do we have any formal documentation about the API compatibility
> >>>>> policies?
> >>>>>> The only things I found are:
> >>>>>>
> >>>>>>    - In the release announcement (take 1.10.0 as an example) [1]:
> >>>>>>    "This version is API-compatible with previous 1.x releases for
> APIs
> >>>>>>    annotated with the @Public annotation."
> >>>>>>    - JavaDoc for Public [2] and PublicEvolving [3].
> >>>>>>
> >>>>>> I think we might have a formal documentation, clearly state our
> >>> policies
> >>>>>> for API compatibility.
> >>>>>>
> >>>>>>    - What does the annotations mean
> >>>>>>    - In what circumstance would the APIs remain compatible / become
> >>>>>>    incompatible
> >>>>>>    - How do APIs retire (e.g., first deprecated then removed?)
> >>>>>>
> >>>>>> Maybe there is already such kind of documentation that I overlooked?
> >>> If
> >>>>> so,
> >>>>>> we probably want to make it more explicit and easy-to-find.
> >>>>>>
> >>>>>> ### @Public vs. @PublicEvolving for new things
> >>>>>>
> >>>>>> I share Stephan's concern that, with @PublicEvolving used for every
> >>> new
> >>>>>> feature and rarely upgraded to @Public, we are practically making no
> >>>>>> compatibility guarantee between minor versions (x.y.* / x.z.*). On
> the
> >>>>>> other hand, I think in many circumstances we do need some time to
> >>>>> collect
> >>>>>> feedbacks for new features before we have enough confidence to make
> >>> the
> >>>>>> commitment that our APIs are stable. Therefore, it makes more sense
> to
> >>>>> me
> >>>>>> to first make new features @PublicEvolving and then upgrade to
> @Public
> >>>>> in
> >>>>>> the next one or two releases (unless there's a good reason to
> further
> >>>>>> postpone it).
> >>>>>>
> >>>>>> I think the key point is how do we make sure the @PublicEvolving
> >>>>> features
> >>>>>> upgrade to @Public. Maybe we can add a parameter to indicate the
> >>>>> expected
> >>>>>> upgrading version. E.g., a new feature introduced in release 1.10.0
> >>>>> might
> >>>>>> be annotated as @PublicEvolving("1.12.0"), indicating that it is
> >>>>> expected
> >>>>>> to be upgraded to @Public in release 1.12.0. We can check the
> >>>>> annotations
> >>>>>> against the version automatically, forcing to either upgrad the
> >>> feature
> >>>>>> to @Public or explicitly postpone it by modifying the annotation
> >>>>> parameter
> >>>>>> (if there's a good reason).
> >>>>>>
> >>>>>> Additionally, we can do the similar for deprecated features / APIs,
> >>>>>> reminding us to remove things annotated as @Deprecated at certain
> >>> time.
> >>>>>> Thank you~
> >>>>>>
> >>>>>> Xintong Song
> >>>>>>
> >>>>>>
> >>>>>> [1] https://flink.apache.org/news/2020/02/11/release-1.10.0.html
> >>>>>>
> >>>>>> [2]
> >>>>>>
> >>>>>>
> >>>
> https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/annotation/Public.html
> >>>>>> [3]
> >>>>>>
> >>>>>>
> >>>
> https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/annotation/PublicEvolving.html
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On Thu, May 14, 2020 at 8:22 PM Stephan Ewen <se...@apache.org>
> >>> wrote:
> >>>>>>> I just want to throw in that we also need to rethink our policy
> >>>>> towards
> >>>>>>> using @PublicEvolving.
> >>>>>>>
> >>>>>>> We often introduce this easily (for every new feature) and rarely
> >>>>> (almost
> >>>>>>> never) upgrade it to @Public. This kind of leads the idea behind
> >>>>> stable
> >>>>>> API
> >>>>>>> guarantees ad absurdum.
> >>>>>>>
> >>>>>>> I would suggest that we make @PublicEvolving an exception that
> >>> needs a
> >>>>>> good
> >>>>>>> reason rather than for everything that is new (when we don't want
> to
> >>>>> be
> >>>>>>> bothered with thinking about compatibility).
> >>>>>>>
> >>>>>>>
> >>>>>>> On Thu, May 14, 2020 at 1:05 PM Xintong Song <
> tonysong...@gmail.com
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Thanks for the clarification.
> >>>>>>>> +1 for keeping the current guarantees for @Public.
> >>>>>>>>
> >>>>>>>> Thank you~
> >>>>>>>>
> >>>>>>>> Xintong Song
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Thu, May 14, 2020 at 6:07 PM Till Rohrmann <
> >>> trohrm...@apache.org
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Sorry for the confusion. @Public classes are guaranteed to be
> >>>>> stable
> >>>>>>>>> between releases x.y.z and x.u.v (minor and bug fix release;
> >>>>> naming
> >>>>>> is
> >>>>>>>>> indeed a bit off here) and we can break it with major releases
> >>>>> (x.0.0
> >>>>>>> and
> >>>>>>>>> y.0.0).
> >>>>>>>>>
> >>>>>>>>> @Tison I would like to make what to include in the public API,
> >>>>> hence
> >>>>>>> what
> >>>>>>>>> to annotate with @Public and @PublicEvolving, a separate
> >>>>> discussion.
> >>>>>>>>> Cheers,
> >>>>>>>>> Till
> >>>>>>>>>
> >>>>>>>>> On Thu, May 14, 2020 at 11:48 AM tison <wander4...@gmail.com>
> >>>>> wrote:
> >>>>>>>>>> Thanks for starting this discussion!
> >>>>>>>>>>
> >>>>>>>>>> I agree turn on japicmp on PublicEvolving among bugfix releases
> >>>>> is a
> >>>>>>> nit
> >>>>>>>>>> win.
> >>>>>>>>>>
> >>>>>>>>>> @Xintong Song <tonysong...@gmail.com> I think @Public
> >>> guarantee
> >>>>> is
> >>>>>>> good
> >>>>>>>>>> enough, the problem is a reachable 2.0 plan.
> >>>>>>>>>>
> >>>>>>>>>> My concern is more on classes that have no annotation but our
> >>>>>>> developers
> >>>>>>>>>> regard as "something that should be stable". Previously I was
> >>>>>> required
> >>>>>>>> to
> >>>>>>>>>> keep compatibility of ClusterClient & HighAvailabilityServices
> >>>>>> because
> >>>>>>>>>> they
> >>>>>>>>>> might be depended on by user.
> >>>>>>>>>>
> >>>>>>>>>> Best,
> >>>>>>>>>> tison.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Dawid Wysakowicz <dwysakow...@apache.org> 于2020年5月14日周四
> >>>>> 下午5:08写道:
> >>>>>>>>>>> I also like the proposal for keeping the binary compatibility
> >>>>> of
> >>>>>>>>>>> @PublicEvolving for bugfix releases.
> >>>>>>>>>>>
> >>>>>>>>>>> As for the @Public classes I think the current guarantees are
> >>>>> good
> >>>>>>>>>> enough.
> >>>>>>>>>>> Best,
> >>>>>>>>>>>
> >>>>>>>>>>> Dawid
> >>>>>>>>>>>
> >>>>>>>>>>> On 14/05/2020 10:49, Jingsong Li wrote:
> >>>>>>>>>>>> Thanks Till for starting this discussion.
> >>>>>>>>>>>>
> >>>>>>>>>>>> +1 for enabling the japicmp-maven-plugin for
> >>> @PublicEvolving
> >>>>> for
> >>>>>>> bug
> >>>>>>>>>> fix
> >>>>>>>>>>>> releases.
> >>>>>>>>>>>> Bug fix should just be user imperceptible bug fix. Should
> >>> not
> >>>>>>> affect
> >>>>>>>>>> API
> >>>>>>>>>>>> and binary compatibility.
> >>>>>>>>>>>>
> >>>>>>>>>>>> And even PublicEvolving api change for "y" release, we
> >>> should
> >>>>>>> expose
> >>>>>>>>>> it
> >>>>>>>>>>> in
> >>>>>>>>>>>> dev mail list for discussing or a FLIP?
> >>>>>>>>>>>>
> >>>>>>>>>>>> BTW, public api can be changed by major releases? In
> >>>>> annotation
> >>>>>>>>>> comments:
> >>>>>>>>>>>> "Only major releases (1.0, 2.0, 3.0) can break interfaces
> >>>>> with
> >>>>>>> this
> >>>>>>>>>>>> annotation".
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best,
> >>>>>>>>>>>> Jingsong Lee
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Thu, May 14, 2020 at 4:30 PM Till Rohrmann <
> >>>>>>> trohrm...@apache.org
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>>> Dear community,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> in the latest 1.10.1 bug fix release I introduced a binary
> >>>>>>>>>> incompatible
> >>>>>>>>>>>>> change to a class which is annotated with @PublicEvolving
> >>>>> [1].
> >>>>>>>> While
> >>>>>>>>>>> this
> >>>>>>>>>>>>> change is technically ok since we only provide API and
> >>>>> binary
> >>>>>>>>>>> compatibility
> >>>>>>>>>>>>> for @Public classes across releases, it raised the
> >>> question
> >>>>>>> whether
> >>>>>>>>>> we
> >>>>>>>>>>>>> can't do better.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> For our users it might be surprising and really annoying
> >>>>> that
> >>>>>>> they
> >>>>>>>>>>> cannot
> >>>>>>>>>>>>> simply upgrade to the latest bug fix release without
> >>>>>> recompiling
> >>>>>>>> the
> >>>>>>>>>>>>> program or even having to change the source code of an
> >>>>>>>> application. I
> >>>>>>>>>>>>> believe we would provide a much better experience if we
> >>>>> ensured
> >>>>>>>> that
> >>>>>>>>>> bug
> >>>>>>>>>>>>> fix releases maintain API and binary compatibility also
> >>> for
> >>>>>>>>>>> @PublicEvolving
> >>>>>>>>>>>>> classes. Hence my proposal would be to tighten the
> >>> stability
> >>>>>>>>>> guarantees
> >>>>>>>>>>> the
> >>>>>>>>>>>>> following way:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> * API + binary compatibility for @Public classes across
> >>> all
> >>>>>>>> releases
> >>>>>>>>>>> (x.y.z
> >>>>>>>>>>>>> is compatible to u.v.w)
> >>>>>>>>>>>>> * API + binary compatibility for @PublicEvolving classes
> >>> for
> >>>>>> all
> >>>>>>>> bug
> >>>>>>>>>> fix
> >>>>>>>>>>>>> releases in a minor release (x.y.z is compatible to x.y.u)
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> This would entail that we can change @PublicEvolving
> >>> classes
> >>>>>> only
> >>>>>>>>>> across
> >>>>>>>>>>>>> minor/major releases.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Practically this would mean that we enable the
> >>>>>>> japicmp-maven-plugin
> >>>>>>>>>>>>> for @PublicEvolving for bug fix releases.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> What do you think?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> [1]
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>
> https://lists.apache.org/thread.html/r293768d13d08149d756e0bf91be52372edb444c317535d1d5a496c3e%40%3Cdev.flink.apache.org%3E
> >>>>>>>>>>>>> Cheers,
> >>>>>>>>>>>>> Till
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >
>
>

Reply via email to