The discuss thread for tightening the stability guarantees for @PublicEvolving classes can be found here [1]
[1] https://lists.apache.org/thread.html/rb0d0f887b291a490ed3773352c90ddf5f11e3d882dc501e3b8cf0ed0%40%3Cdev.flink.apache.org%3E Cheers, Till On Thu, May 14, 2020 at 10:13 AM Till Rohrmann <trohrm...@apache.org> wrote: > I agree with the pragmatic solution. > > Concerning the stability guarantees I will start a separate discussion > thread whether to provide stricter guarantees or not. > > Cheers, > Till > > On Wed, May 13, 2020 at 10:13 PM Thomas Weise <t...@apache.org> wrote: > >> On Wed, May 13, 2020 at 1:02 PM Piotr Nowojski <pi...@ververica.com> >> wrote: >> >> > Hi, >> > >> > > For the future, it would be great to eliminate the possibility of >> > > incompatible changes to user-facing classes for patch releases though. >> > > Running japicmp as part of CI might be a good option. >> > >> > I guess the whole point of PublicEvolving classes is to allow us for the >> > breaking compatibility changes. >> > >> > >> The question here is whether such changes should occur in *patch* >> releases. >> I suspect most users would prefer stronger guarantees. >> >> Another example of "breaking" change that affects Beam (though class >> OptimizerPlanEnvironment isn't covered by annotation and it only affects >> test code): >> >> https://github.com/apache/beam/pull/11683 >> >> Piotrek >> > >> > > On 13 May 2020, at 18:29, Thomas Weise <t...@apache.org> wrote: >> > > >> > > For release branches, it would be good to not exclude PublicEvolving >> from >> > > checking, by default [1]. >> > > >> > > There may be instances where it is necessary to make exceptions to >> fix a >> > > critical bug, but those could be whitelisted. >> > > >> > > Similarly, it might be good to blacklist dependency changes for patch >> > > releases, by default. >> > > >> > > [1] >> > > >> > >> https://github.com/apache/flink/blob/e1e7d7f7ecc080c850a264021bf1b20e3d27d373/pom.xml#L1959 >> > > >> > > On Wed, May 13, 2020 at 9:16 AM Chesnay Schepler <ches...@apache.org> >> > wrote: >> > > >> > >> We are running japicmp in CI; we just don't check anything that is >> > >> PublicEvolving. >> > >> >> > >> On 13/05/2020 18:04, Thomas Weise wrote: >> > >>> +1 for the release note addition >> > >>> >> > >>> Historically Flink X.Y.0 releases have been prone to issues like >> this. >> > >> And >> > >>> I suspect that many users would prefer to upgrade to X.Y.1 due to >> other >> > >>> bugs that need to be shaken out. >> > >>> >> > >>> For the future, it would be great to eliminate the possibility of >> > >>> incompatible changes to user-facing classes for patch releases >> though. >> > >>> Running japicmp as part of CI might be a good option. >> > >>> >> > >>> Thanks, >> > >>> Thomas >> > >>> >> > >>> On Wed, May 13, 2020 at 7:54 AM Seth Wiesman <sjwies...@gmail.com> >> > >> wrote: >> > >>> >> > >>>> +1 Ufuk's pragmatic solution to update the release notes with a >> public >> > >>>> notice, I have commented on the release notes PR. >> > >>>> >> > >>>> https://github.com/apache/flink-web/pull/330 >> > >>>> >> > >>>> Seth >> > >>>> >> > >>>> On Wed, May 13, 2020 at 8:30 AM Chesnay Schepler < >> ches...@apache.org> >> > >>>> wrote: >> > >>>> >> > >>>>> IIRC @PublicEvolving had no /real/ guarantees, from the 1.0.0 >> > >>>> announcement: >> > >>>>> /"Flink 1.0.0 introduces interface stability annotations for API >> > >> classes >> > >>>>> and methods. Interfaces defined as //|@Public|//are guaranteed to >> > >> remain >> > >>>>> stable across all releases of the 1.x series. The >> > >>>>> //|@PublicEvolving|//annotation marks API features that may be >> > subject >> > >>>>> to change in future versions."/ >> > >>>>> >> > >>>>> 1) We don't have a process for promoting things to @Public >> because we >> > >>>>> have actually never done that. Based on our current rules, it is >> an >> > >>>>> addition to the public API (technically even more so than most >> > FLIPs), >> > >>>>> and hence should go through a FLIP and vote. >> > >>>>> Ideally we evaluate existing @PublicEvolving API's for promotion >> on >> > >> each >> > >>>>> release. >> > >>>>> >> > >>>>> 2) Yes, I think this is an excellent idea; as Ufuk said users >> should >> > >> not >> > >>>>> be worried about upgrading to the next minor version. Not sure how >> > easy >> > >>>>> this is to implement; but it basically means either modifying or >> > adding >> > >>>>> new new japicmp execution when forking the release-X.Y branches. >> > >>>>> >> > >>>>> On 13/05/2020 15:19, Till Rohrmann wrote: >> > >>>>>> A small addendum: The project currently enforces only binary >> > >>>>> compatibility >> > >>>>>> for classes which are annotated with @Public. The >> StreamingFileSink >> > is >> > >>>>>> annotated with @PublicEvolving. >> > >>>>>> >> > >>>>>> I am not sure whether the community properly defined what kind of >> > >>>>>> stability/compatibility guarantees we provide for @PublicEvolving >> > >>>>> classes. >> > >>>>>> We can derive two follow-up discussions from this: >> > >>>>>> >> > >>>>>> 1) Should the StreamingFileSink be made @Public? Should >> > >>>>>> other @PublicEvolving classes be promoted? What is the process >> here? >> > >>>>>> >> > >>>>>> 2) Should we enforce binary compatibility of @PublicEvolving >> classes >> > >>>>>> between bug fix releases and allow breaking changes between >> > >> minor/major >> > >>>>>> releases? >> > >>>>>> >> > >>>>>> Cheers, >> > >>>>>> Till >> > >>>>>> >> > >>>>>> On Wed, May 13, 2020 at 2:30 PM Ufuk Celebi <u...@apache.org> >> wrote: >> > >>>>>> >> > >>>>>>> Thanks for the analysis Till. >> > >>>>>>> >> > >>>>>>> 1/ I think breaking binary compatibility is acceptable between >> > minor >> > >>>>>>> releases (1.10 -> 1.11) as you suggested since the API is marked >> > >>>>>>> as @PublicEvolving. >> > >>>>>>> >> > >>>>>>> 2/ I'm quite torn about how to proceed with the 1.10.x patch >> > release, >> > >>>>> but >> > >>>>>>> slightly leaning towards the "pragmatic" solution of keeping the >> > >>>> change >> > >>>>> and >> > >>>>>>> adding a big warning to the 1.10.1 release announcement*. What >> do >> > >>>> others >> > >>>>>>> think? If we do want to revert the change and follow up with a >> > 1.10.2 >> > >>>>>>> release we should do it _before_ we announce 1.10.1 publicly. >> Doing >> > >> it >> > >>>>>>> after 1.10.1 has been announced would only cause more friction >> for >> > >>>>> users. >> > >>>>>>> – Ufuk >> > >>>>>>> >> > >>>>>>> *I hope we don't lose user trust with this. I really would like >> > users >> > >>>>> to be >> > >>>>>>> able to upgrade to the latest patch release without hesitation. >> > >>>>>>> >> > >>>>>>> On Wed, May 13, 2020 at 11:45 AM Till Rohrmann < >> > trohrm...@apache.org >> > >>> >> > >>>>>>> wrote: >> > >>>>>>> >> > >>>>>>>> Thanks for reporting this issue Seth. This is indeed a big >> > problem. >> > >>>>>>>> >> > >>>>>>>> I looked into the problem and it seems we have the following >> > >>>> situation: >> > >>>>>>>> # 1.9.x --> 1.10.0 >> > >>>>>>>> >> > >>>>>>>> There is an API breaking change between 1.9.x and 1.10 due >> > >>>> FLINK-13864 >> > >>>>>>>> because it introduced another generic parameter. I expected >> only >> > few >> > >>>>>>> people >> > >>>>>>>> will be affected by this because one would have to store the >> > builder >> > >>>>> in a >> > >>>>>>>> variable. >> > >>>>>>>> >> > >>>>>>>> 1.9.x is binary compatible with 1.10.0. >> > >>>>>>>> >> > >>>>>>>> # 1.10.0 -> 1.10.1 >> > >>>>>>>> >> > >>>>>>>> There is no API breaking change between 1.10.0 and 1.10.1. >> > >>>>>>>> >> > >>>>>>>> I changed the return type of the StreamingFileSink.forRowFormat >> > and >> > >>>>>>>> .forBulkFormat to a subtype of >> StreamingFileSink.BulkFormatBuilder >> > >> in >> > >>>>>>>> FLINK-16684. This causes the java.lang.NoSuchMethodError and >> the >> > >>>> binary >> > >>>>>>>> incompatibility between 1.10.0 and 1.10.1. This is should not >> > happen >> > >>>>> for >> > >>>>>>>> bug fix releases. >> > >>>>>>>> >> > >>>>>>>> W/o FLINK-16684, the StreamingFileSink builders cannot be used >> > with >> > >>>>>>> Flink's >> > >>>>>>>> Scala API. >> > >>>>>>>> >> > >>>>>>>> # Options >> > >>>>>>>> >> > >>>>>>>> I think we should keep the fix for 1.11.0 and add a release >> note >> > >> that >> > >>>>> we >> > >>>>>>>> are violating binary compatibility between 1.10 and 1.11. >> > >>>>>>>> >> > >>>>>>>> Now the question is what to do with the 1.10.x branch: >> > >>>>>>>> >> > >>>>>>>> a) We can revert the change to re-establish binary >> compatibility >> > >>>>> between >> > >>>>>>>> 1.9.x, 1.10.0 and 1.10.2 but not between 1.10.1 and 1.10.2. >> This >> > >>>> would >> > >>>>>>> also >> > >>>>>>>> imply that we cannot use the StreamingFileSink builders with >> the >> > >>>> Scala >> > >>>>>>> API. >> > >>>>>>>> b) Keep the change and add a release note that our users need >> to >> > >>>>>>> recompile >> > >>>>>>>> their jobs. This would allow Flink 1.10.x with x >= 1 users to >> use >> > >>>>>>>> StreamingFileSink builders with the Scala API. >> > >>>>>>>> >> > >>>>>>>> I am not entirely sure which need weighs more: binary >> > compatibility >> > >>>>>>> between >> > >>>>>>>> bug fix releases or a working API (small subset of it). Another >> > >>>> aspect >> > >>>>> to >> > >>>>>>>> consider is how many people will migrate from 1.10.0 to 1.10.1 >> > >>>> compared >> > >>>>>>> to >> > >>>>>>>> 1.y to 1.10.1 with y <= 9. If the former is very small then one >> > >> might >> > >>>>>>> make >> > >>>>>>>> a case for keeping the change. >> > >>>>>>>> >> > >>>>>>>> What do the others think? >> > >>>>>>>> >> > >>>>>>>> https://issues.apache.org/jira/browse/FLINK-13864 >> > >>>>>>>> https://issues.apache.org/jira/browse/FLINK-16684 >> > >>>>>>>> >> > >>>>>>>> Cheers, >> > >>>>>>>> Till >> > >>>>>>>> >> > >>>>>>>> On Tue, May 12, 2020 at 7:26 PM Thomas Weise <t...@apache.org> >> > >> wrote: >> > >>>>>>>> >> > >>>>>>>>> We also noticed that and had to make an adjustment downstream. >> > >>>>>>>>> >> > >>>>>>>>> It would be good to mention this in the release notes (if >> that's >> > >> not >> > >>>>>>>>> already the case). >> > >>>>>>>>> >> > >>>>>>>>> Thomas >> > >>>>>>>>> >> > >>>>>>>>> >> > >>>>>>>>> On Tue, May 12, 2020 at 10:06 AM Seth Wiesman < >> > sjwies...@gmail.com >> > >>> >> > >>>>>>>> wrote: >> > >>>>>>>>>> Hi Everyone, >> > >>>>>>>>>> >> > >>>>>>>>>> I realize I'm about 7 hours late but I just realized there >> is a >> > >>>>>>>> breaking >> > >>>>>>>>>> API change in 1.10.1. FLINK-16684 changes the API of the >> > streaming >> > >>>>>>> file >> > >>>>>>>>>> sink in a binary incompatible way. Since the release has been >> > >>>>>>> approved >> > >>>>>>>>> I'm >> > >>>>>>>>>> not sure the correct course of action but I wanted to bring >> this >> > >> to >> > >>>>>>> the >> > >>>>>>>>>> communities attention. >> > >>>>>>>>>> >> > >>>>>>>>>> Seth >> > >>>>>>>>>> >> > >>>>>>>>>> https://issues.apache.org/jira/browse/FLINK-16684 >> > >>>>>>>>>> >> > >>>>> >> > >> >> > >> >> > >> > >> >