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

Reply via email to