Thanks for bringing up this discussion, Becket.

My two cents:

1. Do we allow deprecation & removal of APIs without adding a new one as a
replacement? The examples in the table give me an impression that marking
an API as `@Deprecated` should only happen at the same time of introducing
a new replacing API, which I think is true in most but not all the cases.

If there is a major version bump before 2 minor releases in the current
> major version are reached, the major version should keep the source code in
> its own minor version until two minor versions are reached. For example, in
> the above case, if Flink 2.0 is released after 1.20, then the deprecated
> source code of foo will be kept in 2.0 and all the 2.x versions. It can
> only be removed in 3.0.
>

2. I think this might be a bit too strict. For an API that we already
decided to remove, having to keep it for all the 2.x versions simply
because there's less than 2 minor releases between making the decision and
the major release bump seems not necessarily. Alternatively, I'd like to
propose to remove the `@Public` annotation (or downgrade it to
`@PublicEvolving`) in 2.0, and remove it in 2.2.

Best,

Xintong



On Wed, Jun 14, 2023 at 3:56 PM Becket Qin <becket....@gmail.com> wrote:

> Hi Jing,
>
> Thanks for the feedback. Please see the answers to your questions below:
>
> *"Always add a "Since X.X.X" comment to indicate when was a class /
> > interface / method marked as deprecated."*
> >  Could you describe it with a code example? Do you mean Java comments?
>
> It is just a comment such as "Since 1.18. Use X
> <
> https://kafka.apache.org/31/javadoc/org/apache/kafka/clients/admin/Admin.html#incrementalAlterConfigs(java.util.Map)
> >XX
> instead.". And we can then look it up in the deprecated list[1] in each
> release and see which method should / can be deprecated.
>
> *"At least 1 patch release for the affected minor release for
> > Experimental APIs"*
> > The rule is absolutely right. However, afaiac, deprecation is different
> as
> > modification. As a user/dev, I would appreciate, if I do not need to do
> any
> > migration work for any deprecated API between patch releases upgrade.
> BTW,
> > if experimental APIs are allowed to change between patches, could we just
> > change them instead of marking them as deprecated and create new ones to
> > replace them?
>
> Deprecating an API is just a more elegant way of replacing an API with a
> new one. The only difference between the two is whether the old API is kept
> and coexists with the new API for some releases or not. For end users,
> deprecation-then-remove is much more friendly than direct replacement.
>
> 1. How to make sure the new APIs cover all functionality, i.e. backward
> > compatible, before removing the deprecated APIs? Since the
> > functionalities could only be built with the new APIs iteratively, there
> > will be a while (might be longer than the migration period) that the new
> > APIs are not backward compatible with the deprecated ones.
>
> This is orthogonal to the deprecation process, and may not even be required
> in some cases if the function changes by itself. But in general, this
> relies on the developer to decide. A simple test on readiness is to see if
> all the UT / IT cases written with the old API can be migrated to the new
> one and still work.  If the new API is not ready, we probably should not
> deprecate the old one to begin with.
>
> 2. Is it allowed to remove the deprecated APIs after the defined migration
> > period expires while the new APis are still not backward compatible?
>
> By "backwards compatible", do you mean functionally equivalent? If the new
> APIs are designed to be not backwards compatible, then removing the
> deprecated source code is definitely allowed. If we don't think the new API
> is ready to take over the place for the old one, then we should wait. The
> migration period is the minimum time we have to wait before removing the
> source code. A longer migration period is OK.
>
> 3. For the case of core API upgrade with downstream implementations, e.g.
> > connectors, What is the feasible deprecation strategy? Option1 bottom-up:
> > make sure the downstream implementation is backward compatible before
> > removing the deprecated core APIs. Option2 top-down: once the downstream
> > implementation of new APIs works fine, we can remove the deprecated core
> > APIs after the migration period expires. The implementation of the
> > deprecated APIs will not get any further update in upcoming releases(it
> has
> > been removed). There might be some missing features in the downstream
> > implementation of new APIs compared to the old implementation. Both
> options
> > have their own pros and cons.
>
> The downstream projects such as connectors in Flink should also follow the
> migration path we tell our users. i.e. If there is a cascading backwards
> incompatible change in the connectors due to a backwards incompatible
> change in the core, and as a result a longer migration period is required,
> then I think we should postpone the removal of source code. But in general,
> we should be able to provide the same migration period in the connectors as
> the flink core, if the connectors are upgraded to the latest version of
> core promptly.
>
> Thanks,
>
> Jiangjie (Becket) Qin
>
> [1]
>
> https://nightlies.apache.org/flink/flink-docs-master/api/java/deprecated-list.html
>
>
> On Wed, Jun 14, 2023 at 1:15 AM Jing Ge <j...@ververica.com.invalid>
> wrote:
>
> > > This is by design. Most of these are @Public APIs that we had to carry
> > > around until Flink 2.0, because that was the initial guarantee that we
> > > gave people.
> > >
> >
> > True, I knew @Public APIs could not be removed before the next major
> > release. I meant house cleaning without violation of these annotations'
> > design concept. i.e especially cleaning up for @PublicEvolving APIs since
> > they are customer-facing. Regular cleaning up with all other
> @Experimental
> > and @Internal APIs would be even better, if there might be some APIs
> marked
> > as @deprecated.
> >
> > Best regards,
> > Jing
> >
> >
> >
> > On Tue, Jun 13, 2023 at 4:25 PM Chesnay Schepler <ches...@apache.org>
> > wrote:
> >
> > > On 13/06/2023 12:50, Jing Ge wrote:
> > > > One major issue we have, afaiu, is caused by the lack of
> > > housekeeping/house
> > > > cleaning, there are many APIs that were marked as deprecated a few
> > years
> > > > ago and still don't get removed. Some APIs should be easy to remove
> and
> > > > others will need some more clear rules, like the issue discussed at
> > [1].
> > >
> > This is by design. Most of these are @Public APIs that we had to carry
> > > around until Flink 2.0, because that was the initial guarantee that we
> > > gave people.
> >
> >
> > >
> > > As for the FLIP, I like the idea of explicitly writing down a
> > > deprecation period for APIs, particularly PublicEvolving ones.
> > > For Experimental I don't think it'd be a problem if we could change
> them
> > > right away,
> > > but looking back a bit I don't think it hurts us to also enforce some
> > > deprecation period.
> > > 1 release for both of these sound fine to me.
> > >
> > >
> > > My major point of contention is the removal of Public APIs between
> minor
> > > versions.
> > > This to me would a major setback towards a simpler upgrade path for
> > users.
> > > If these can be removed in minor versions than what even is a major
> > > release?
> > > The very definition we have for Public APIs is that they stick around
> > > until the next major one.
> > > Any rule that theoretically allows for breaking changes in Public API
> in
> > > every minor release is in my opinion not a viable option.
> > >
> > >
> > > The "carry recent Public APIs forward into the next major release"
> thing
> > > seems to presume a linear release history (aka, if 2.0 is released
> after
> > > 1.20, then there will be no 1.21), which I doubt will be the case. The
> > > idea behind it is good, but I'd say the right conclusion would be to
> not
> > > make that API public if we know a new major release hits in 3 months
> and
> > > is about to modify it. With a regular schedule for major releases this
> > > wouldn't be difficult to do.
> > >
> >
>

Reply via email to