How would we enforce this change? That we would enable different, more strict 
compatibility checks on the `release-1.x` branches?

Piotrek

> On 16 May 2020, at 08:33, Congxian Qiu <qcx978132...@gmail.com> wrote:
> 
> Sorry for the late jump in.
> 
> +1 to keep the compatibility of @PublicEvolving between minor
> releases(x.y.a -> x.y.b), as a user I always think this as a bug-fix
> release, break the compatibility between minor releases may give users a
> surprise.
> 
> As the previous emails said, how and when will a @PublicEvolving
> become @Public, and I'm not sure if we can have a technical solution to
> keep such a rule. (In my opinion, check such things -- change
> @PublicEvolving to @Public -- manually may not so easy)
> 
> Best
> Congxian
> 
> 
> Till Rohrmann <trohrm...@apache.org> 于2020年5月15日周五 下午9:18写道:
> 
>> The vote thread can be found here
>> 
>> https://lists.apache.org/thread.html/rc58099fb0e31d0eac951a7bbf7f8bda8b7b65c9ed0c04622f5333745%40%3Cdev.flink.apache.org%3E
>> .
>> 
>> Cheers,
>> Till
>> 
>> On Fri, May 15, 2020 at 3:03 PM Till Rohrmann <trohrm...@apache.org>
>> wrote:
>> 
>>> I completely agree that there are many other aspect of our guarantees and
>>> processes around the @Public and @PublicEvolving classes which need to be
>>> discussed and properly defined. For the sake of keeping this discussion
>>> thread narrowly scoped, I would suggest to start a separate discussion
>>> about the following points (not exhaustive):
>>> 
>>> - What should be annotated with @Public and @PublicEvolving?
>>> - Process for transforming @PublicEvolving into @Public; How to ensure
>>> that @PublicEvolving will eventually be promoted to @Public?
>>> - Process of retiring a @Public/@PublicEvolving API
>>> 
>>> I will start a vote thread about the change I proposed here which is to
>>> ensure API and binary compatibility for @PublicEvolving classes between
>>> bugfix releases (x.y.z and x.y.u).
>>> 
>>> Cheers,
>>> Till
>>> 
>>> On Fri, May 15, 2020 at 6:33 AM Zhu Zhu <reed...@gmail.com> wrote:
>>> 
>>>> +1 for "API + binary compatibility for @PublicEvolving classes for all
>> bug
>>>> fix
>>>> releases in a minor release (x.y.z is compatible to x.y.u)"
>>>> 
>>>> This @PublicEnvolving would then be a hard limit to changes.
>>>> So it's important to rethink the policy towards using it, as Stephan
>>>> proposed.
>>>> 
>>>> I think any Flink interfaces that are visible to users should be
>>>> explicitly
>>>> marked as @Public or @PublicEnvolving.
>>>> Any other interfaces should not be marked as @Public/@PublicEnvolving.
>>>> This would be essential for us to check whether we are breaking any user
>>>> faced interfaces unexpectedly.
>>>> The only exception would be the case that we had to expose a
>> method/class
>>>> due to implementation limitations, it should be explicitly marked it
>>>> as @Internal.
>>>> 
>>>> Thanks,
>>>> Zhu Zhu
>>>> 
>>>> Yun Tang <myas...@live.com> 于2020年5月15日周五 上午11:41写道:
>>>> 
>>>>> +1 for this idea, and I also like Xintong's suggestion to make it
>>>>> explicitly when the @PublicEvolving API could upgrade to @Public API.
>>>>> If we have the rule to upgrade API stable level but not define the
>> clear
>>>>> timeline, I'm afraid not everyone have the enthusiasm to upgrade this.
>>>>> 
>>>>> The minor suggestion is that I think two major release (which is x.y.0
>>>> as
>>>>> Chesnay clarified) might be a bit quick. From the release history [1],
>>>>> Flink bump major version every 3 ~ 6 months and two major release gap
>>>>> could only be at least half a year.
>>>>> I think half a year might be a bit too frequent for users to collect
>>>>> enough feedbacks, and upgrading API stable level every 3 major
>> versions
>>>>> should be better.
>>>>> 
>>>>> [1] https://flink.apache.org/downloads.html#flink
>>>>> 
>>>>> Best
>>>>> Yun Tang
>>>>> 
>>>>> 
>>>>> ________________________________
>>>>> From: Xintong Song <tonysong...@gmail.com>
>>>>> Sent: Friday, May 15, 2020 11:04
>>>>> To: dev <dev@flink.apache.org>
>>>>> Subject: Re: [DISCUSS] Stability guarantees for @PublicEvolving
>> classes
>>>>> 
>>>>> ### Documentation on API compatibility policies
>>>>> 
>>>>> Do we have any formal documentation about the API compatibility
>>>> policies?
>>>>> The only things I found are:
>>>>> 
>>>>>   - In the release announcement (take 1.10.0 as an example) [1]:
>>>>>   "This version is API-compatible with previous 1.x releases for APIs
>>>>>   annotated with the @Public annotation."
>>>>>   - JavaDoc for Public [2] and PublicEvolving [3].
>>>>> 
>>>>> I think we might have a formal documentation, clearly state our
>> policies
>>>>> for API compatibility.
>>>>> 
>>>>>   - What does the annotations mean
>>>>>   - In what circumstance would the APIs remain compatible / become
>>>>>   incompatible
>>>>>   - How do APIs retire (e.g., first deprecated then removed?)
>>>>> 
>>>>> Maybe there is already such kind of documentation that I overlooked?
>> If
>>>> so,
>>>>> we probably want to make it more explicit and easy-to-find.
>>>>> 
>>>>> ### @Public vs. @PublicEvolving for new things
>>>>> 
>>>>> I share Stephan's concern that, with @PublicEvolving used for every
>> new
>>>>> feature and rarely upgraded to @Public, we are practically making no
>>>>> compatibility guarantee between minor versions (x.y.* / x.z.*). On the
>>>>> other hand, I think in many circumstances we do need some time to
>>>> collect
>>>>> feedbacks for new features before we have enough confidence to make
>> the
>>>>> commitment that our APIs are stable. Therefore, it makes more sense to
>>>> me
>>>>> to first make new features @PublicEvolving and then upgrade to @Public
>>>> in
>>>>> the next one or two releases (unless there's a good reason to further
>>>>> postpone it).
>>>>> 
>>>>> I think the key point is how do we make sure the @PublicEvolving
>>>> features
>>>>> upgrade to @Public. Maybe we can add a parameter to indicate the
>>>> expected
>>>>> upgrading version. E.g., a new feature introduced in release 1.10.0
>>>> might
>>>>> be annotated as @PublicEvolving("1.12.0"), indicating that it is
>>>> expected
>>>>> to be upgraded to @Public in release 1.12.0. We can check the
>>>> annotations
>>>>> against the version automatically, forcing to either upgrad the
>> feature
>>>>> to @Public or explicitly postpone it by modifying the annotation
>>>> parameter
>>>>> (if there's a good reason).
>>>>> 
>>>>> Additionally, we can do the similar for deprecated features / APIs,
>>>>> reminding us to remove things annotated as @Deprecated at certain
>> time.
>>>>> 
>>>>> Thank you~
>>>>> 
>>>>> Xintong Song
>>>>> 
>>>>> 
>>>>> [1] https://flink.apache.org/news/2020/02/11/release-1.10.0.html
>>>>> 
>>>>> [2]
>>>>> 
>>>>> 
>>>> 
>> https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/annotation/Public.html
>>>>> 
>>>>> [3]
>>>>> 
>>>>> 
>>>> 
>> https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/annotation/PublicEvolving.html
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Thu, May 14, 2020 at 8:22 PM Stephan Ewen <se...@apache.org>
>> wrote:
>>>>> 
>>>>>> I just want to throw in that we also need to rethink our policy
>>>> towards
>>>>>> using @PublicEvolving.
>>>>>> 
>>>>>> We often introduce this easily (for every new feature) and rarely
>>>> (almost
>>>>>> never) upgrade it to @Public. This kind of leads the idea behind
>>>> stable
>>>>> API
>>>>>> guarantees ad absurdum.
>>>>>> 
>>>>>> I would suggest that we make @PublicEvolving an exception that
>> needs a
>>>>> good
>>>>>> reason rather than for everything that is new (when we don't want to
>>>> be
>>>>>> bothered with thinking about compatibility).
>>>>>> 
>>>>>> 
>>>>>> On Thu, May 14, 2020 at 1:05 PM Xintong Song <tonysong...@gmail.com
>>> 
>>>>>> wrote:
>>>>>> 
>>>>>>> Thanks for the clarification.
>>>>>>> +1 for keeping the current guarantees for @Public.
>>>>>>> 
>>>>>>> Thank you~
>>>>>>> 
>>>>>>> Xintong Song
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Thu, May 14, 2020 at 6:07 PM Till Rohrmann <
>> trohrm...@apache.org
>>>>> 
>>>>>>> wrote:
>>>>>>> 
>>>>>>>> Sorry for the confusion. @Public classes are guaranteed to be
>>>> stable
>>>>>>>> between releases x.y.z and x.u.v (minor and bug fix release;
>>>> naming
>>>>> is
>>>>>>>> indeed a bit off here) and we can break it with major releases
>>>> (x.0.0
>>>>>> and
>>>>>>>> y.0.0).
>>>>>>>> 
>>>>>>>> @Tison I would like to make what to include in the public API,
>>>> hence
>>>>>> what
>>>>>>>> to annotate with @Public and @PublicEvolving, a separate
>>>> discussion.
>>>>>>>> 
>>>>>>>> Cheers,
>>>>>>>> Till
>>>>>>>> 
>>>>>>>> On Thu, May 14, 2020 at 11:48 AM tison <wander4...@gmail.com>
>>>> wrote:
>>>>>>>> 
>>>>>>>>> Thanks for starting this discussion!
>>>>>>>>> 
>>>>>>>>> I agree turn on japicmp on PublicEvolving among bugfix releases
>>>> is a
>>>>>> nit
>>>>>>>>> win.
>>>>>>>>> 
>>>>>>>>> @Xintong Song <tonysong...@gmail.com> I think @Public
>> guarantee
>>>> is
>>>>>> good
>>>>>>>>> enough, the problem is a reachable 2.0 plan.
>>>>>>>>> 
>>>>>>>>> My concern is more on classes that have no annotation but our
>>>>>> developers
>>>>>>>>> regard as "something that should be stable". Previously I was
>>>>> required
>>>>>>> to
>>>>>>>>> keep compatibility of ClusterClient & HighAvailabilityServices
>>>>> because
>>>>>>>>> they
>>>>>>>>> might be depended on by user.
>>>>>>>>> 
>>>>>>>>> Best,
>>>>>>>>> tison.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Dawid Wysakowicz <dwysakow...@apache.org> 于2020年5月14日周四
>>>> 下午5:08写道:
>>>>>>>>> 
>>>>>>>>>> I also like the proposal for keeping the binary compatibility
>>>> of
>>>>>>>>>> @PublicEvolving for bugfix releases.
>>>>>>>>>> 
>>>>>>>>>> As for the @Public classes I think the current guarantees are
>>>> good
>>>>>>>>> enough.
>>>>>>>>>> 
>>>>>>>>>> Best,
>>>>>>>>>> 
>>>>>>>>>> Dawid
>>>>>>>>>> 
>>>>>>>>>> On 14/05/2020 10:49, Jingsong Li wrote:
>>>>>>>>>>> Thanks Till for starting this discussion.
>>>>>>>>>>> 
>>>>>>>>>>> +1 for enabling the japicmp-maven-plugin for
>> @PublicEvolving
>>>> for
>>>>>> bug
>>>>>>>>> fix
>>>>>>>>>>> releases.
>>>>>>>>>>> Bug fix should just be user imperceptible bug fix. Should
>> not
>>>>>> affect
>>>>>>>>> API
>>>>>>>>>>> and binary compatibility.
>>>>>>>>>>> 
>>>>>>>>>>> And even PublicEvolving api change for "y" release, we
>> should
>>>>>> expose
>>>>>>>>> it
>>>>>>>>>> in
>>>>>>>>>>> dev mail list for discussing or a FLIP?
>>>>>>>>>>> 
>>>>>>>>>>> BTW, public api can be changed by major releases? In
>>>> annotation
>>>>>>>>> comments:
>>>>>>>>>>> "Only major releases (1.0, 2.0, 3.0) can break interfaces
>>>> with
>>>>>> this
>>>>>>>>>>> annotation".
>>>>>>>>>>> 
>>>>>>>>>>> Best,
>>>>>>>>>>> Jingsong Lee
>>>>>>>>>>> 
>>>>>>>>>>> On Thu, May 14, 2020 at 4:30 PM Till Rohrmann <
>>>>>> trohrm...@apache.org
>>>>>>>> 
>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Dear community,
>>>>>>>>>>>> 
>>>>>>>>>>>> in the latest 1.10.1 bug fix release I introduced a binary
>>>>>>>>> incompatible
>>>>>>>>>>>> change to a class which is annotated with @PublicEvolving
>>>> [1].
>>>>>>> While
>>>>>>>>>> this
>>>>>>>>>>>> change is technically ok since we only provide API and
>>>> binary
>>>>>>>>>> compatibility
>>>>>>>>>>>> for @Public classes across releases, it raised the
>> question
>>>>>> whether
>>>>>>>>> we
>>>>>>>>>>>> can't do better.
>>>>>>>>>>>> 
>>>>>>>>>>>> For our users it might be surprising and really annoying
>>>> that
>>>>>> they
>>>>>>>>>> cannot
>>>>>>>>>>>> simply upgrade to the latest bug fix release without
>>>>> recompiling
>>>>>>> the
>>>>>>>>>>>> program or even having to change the source code of an
>>>>>>> application. I
>>>>>>>>>>>> believe we would provide a much better experience if we
>>>> ensured
>>>>>>> that
>>>>>>>>> bug
>>>>>>>>>>>> fix releases maintain API and binary compatibility also
>> for
>>>>>>>>>> @PublicEvolving
>>>>>>>>>>>> classes. Hence my proposal would be to tighten the
>> stability
>>>>>>>>> guarantees
>>>>>>>>>> the
>>>>>>>>>>>> following way:
>>>>>>>>>>>> 
>>>>>>>>>>>> * API + binary compatibility for @Public classes across
>> all
>>>>>>> releases
>>>>>>>>>> (x.y.z
>>>>>>>>>>>> is compatible to u.v.w)
>>>>>>>>>>>> * API + binary compatibility for @PublicEvolving classes
>> for
>>>>> all
>>>>>>> bug
>>>>>>>>> fix
>>>>>>>>>>>> releases in a minor release (x.y.z is compatible to x.y.u)
>>>>>>>>>>>> 
>>>>>>>>>>>> This would entail that we can change @PublicEvolving
>> classes
>>>>> only
>>>>>>>>> across
>>>>>>>>>>>> minor/major releases.
>>>>>>>>>>>> 
>>>>>>>>>>>> Practically this would mean that we enable the
>>>>>> japicmp-maven-plugin
>>>>>>>>>>>> for @PublicEvolving for bug fix releases.
>>>>>>>>>>>> 
>>>>>>>>>>>> What do you think?
>>>>>>>>>>>> 
>>>>>>>>>>>> [1]
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>> https://lists.apache.org/thread.html/r293768d13d08149d756e0bf91be52372edb444c317535d1d5a496c3e%40%3Cdev.flink.apache.org%3E
>>>>>>>>>>>> 
>>>>>>>>>>>> Cheers,
>>>>>>>>>>>> Till
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 

Reply via email to