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