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.

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