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

Reply via email to