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 > >> > > > >> > >> > >> > > > >> > > > >> > > > >> > > >> > > > >> > > >> > > > >> > >> > > > > > >> > > > > >> > > > >> > > >> > > >