Thanks much for the input, John, Stefan and Jing. I think Xingtong has well summarized the pros and cons of the two options. Let's collect a few more opinions here and we can move forward with the one more people prefer.
Thanks, Jiangjie (Becket) Qin On Wed, Jun 21, 2023 at 3:20 AM Jing Ge <j...@ververica.com.invalid> wrote: > Hi all, > > Thanks Xingtong for the summary. If I could only choose one of the given > two options, I would go with option 1. I understood that option 2 worked > great with Kafka. But the bridge release will still confuse users and my > gut feeling is that many users will skip 2.0 and be waiting for 3.0 or even > 3.x. And since fewer users will use Flink 2.x, the development focus will > be on Flink 3.0 with the fact that the current Flink release is 1.17 and we > are preparing 2.0 release. That is weird for me. > > THB, I would not name the change from @Public to @Retired as a demotion. > The purpose of @Retire is to extend the API lifecycle with one more stage, > like in the real world, people born, studied, graduated, worked, and > retired. Afaiu from the previous discussion, there are two rules we'd like > to follow simultaneously: > > 1. Public APIs can only be changed between major releases. > 2. A smooth migration phase should be offered to users, i.e. at least 2 > minor releases after APIs are marked as @deprecated. There should be new > APIs as the replacement. > > Agree, those rules are good to improve the user friendliness. Issues we > discussed are rising because we want to fulfill both of them. If we take > care of deprecation very seriously, APIs can be marked as @Deprecated, only > when the new APIs as the replacement provide all functionalities the > deprecated APIs have. In an ideal case without critical bugs that might > stop users adopting the new APIs. Otherwise the expected "replacement" will > not happen. Users will still stick to the deprecated APIs, because the new > APIs can not be used. For big features, it will need at least 4 minor > releases(ideal case), i.e. 2+ years to remove deprecated APIs: > > - 1st minor release to build the new APIs as the replacement and waiting > for feedback. It might be difficult to mark the old API as deprecated in > this release, because we are not sure if the new APIs could cover 100% > functionalities. > - In the lucky case, mark all old APIs as deprecated in the 2nd minor > release. (I would even suggest having the new APIs released at least for > two minor releases before marking it as deprecated to make sure they can > really replace the old APIs, in case we care more about smooth migration) > - 3rd minor release for the migration period > - In another lucky case, the 4th release is a major release, the > deprecated APIs could be removed. > > The above described scenario works only in an ideal case. In reality, it > might take longer to get the new APIs ready and mark the old API > deprecated. Furthermore, if the 4th release is not a major release, we will > have to maintain both APIs for many further minor releases. The question is > how to know the next major release in advance, especially 4 minor releases' > period, i.e. more than 2 years in advance? Given that Flink contains many > modules, it is difficult to ask devs to create a 2-3 years deprecation plan > for each case. In case we want to build major releases at a fast pace, > let's say every two years, it means devs must plan any API deprecation > right after each major release. Afaiac, it is quite difficult. > > The major issue is, afaiu, if we follow rule 2, we have to keep all @Public > APIs, e.g. DataStream, that are not marked as deprecated yet, to 2.0. Then > we have to follow rule 1 to keep it unchanged until we have 3.0. That is > why @Retired is useful to give devs more flexibility and still fulfill both > rules. Let's check it with examples: > > - we have @Public DataStream API in 1.18. It will not be marked > as @Deprecated, because the new APIs as the replacement are not ready. > - we keep the DataStream API itself unchanged in 2.0, but change the > annotation from @Public to @Retire. New APIs will be introduced too. In > this case, Rule 1 is ok, since public API is allowed to change between > major releases. Only changing annotation is the minimal change we could do > and it does not break rule 1. Rule 2 is ok too, since the DataStream APIs > work exactly the same. Attention: the change of @Public -> @Retired can > only be done between major releases, because @Public APIs can only be > changed between major releases. > - in 2.1, DataStream API will be marked as deprecated. > - in 2.2, DataStream will be kept for the migration period. > - in 2.3, DataStream will be removed. > > Becket mentioned previously (please correct me if I didn't understand it > correctly) that users might not check the changes of annotation and the > upgrade process might not be smooth. I was wondering, if users don't pay > attention to that, they will also not pay attention to @deprecated. The > migration will not be smooth too even when we stick to the Java > standard @deprecated. Let's go throw it with examples: > > Scenario 1: with @Retired > > Case 1: users upgrade from 1.18 to 2.0, 2.1, 2.2 - Nothing should be done > for users who still want to use DataStream. The migration is smooth. But > they should be aware of the annotation changes, i.e. @Public -> @Retired > Case 2: users upgrade from 1.18 to 2.3 - DataStream is removed. Since it is > a major release upgrade, breaking changes are expected. > Case 3: users upgrade from 2.0 to 2.3 - DataStream is removed. Since APIs > are marked as @Retired, breaking changes are expected too. > > In addition to fulfilling both rules, there are two more benefits of this > option: > 1. users can upgrade to 2.0 with less/no effort, i.e Case 1. > 2. no bridge release is required. DataStream API could be deprecated in 2.x > without breaking any of the two rules. @Retired provides enough flexibility > for future deprecations and upgrades. > > The only issue I can find is that users might be surprised in case 3, if > they ignore the previous @Public -> @Retired change. But for such users, > they will ignore @deprecated annotation too and will have issues with > pure @deprecated > annotation too: > > Scenario 2: with @deprecated > > The example will be slightly different from scenario 1, because @Public > APIs can only be removed between major releases. As an example, DataStream > API will be marked as deprecated in 1.19, kept in 1.20, and then removed in > 2.0 > > Case 1: users upgrade from 1.18 to 2.0 - APIs that are not marked as > deprecated are removed between major releases. Rule 1 is ok. The 2 minor > releases period defined in rule 2 sounds like a smooth migration plan, but > for users in this case, it is still not smooth. > Case 2: users upgrade from 1.20 to 2.0 - Standard upgrade process with > deprecated APIs. But for those users who ignore annotation changes, will > have the same issue mentioned in case 1. > > I understood that, compared to scenario 1, users, who ignore @Public > -> @Retired > changes, will not face any breaking changes, after they migrated to 2.0. > But the cost of it is bridge releases. There might be many bridge releases > in the future. As I mentioned previously, it is not easy to find the right > timing to kick off the deprecation process of APIs before the next expected > major release and 2-3 years in advance. > > Scenario 3: @PublicEvolving deprecation for users who ignore @deprecated > annotation changes > > Sample API marked as deprecated in 1.19, kept in 1.20, removed in 1.21 > > Case 1: users upgrade from 1.18 to 1.21 - breaking change, no smooth > migration. > Case 2: users upgrade from 1.20 to 1.21 - same breaking change, > since @deprecated is ignored > > In summary, for users who care about the annotation change, they will get > more benefits with @Retired. For users who ignore annotation changes, they > will be always facing non-smooth upgrades even using pure standard > @deprecated > annotation/process. > > For the case that IDEs support @deprecated, that is true. There are no such > supports for homebuilt annotation. But the intention is to let users be > aware of it. There will be other ways to do it for users who care about > annotation changes. For users who do not care, there should be no > difference between with tool support or without. Using @Retired with > @deprecation > together is at least not worse than only using @deprecation alone. And > there are additional benefits with @Retired. > > Just my 2 cents and looking forward to your feedback, especially different > opinions that will help me understand the issue better. Thanks! > > > Best regards, > Jing > > > > > > > On Tue, Jun 20, 2023 at 4:50 PM Stefan Richter > <srich...@confluent.io.invalid> wrote: > > > Hi Xintong, > > > > Thanks for the summary, most of the points that you agreed upon also make > > sense to me. > > > > > 2. Dropping deprecated Public APIs in minor releases, or demoting > APIs > > > from Public to PublicEvolving / Experimental / Retired in any version > > bump, > > > are not good practices. > > > > I hope we can can go beyond calling it “not a good practice" and reach > > consensus that we will not demote or remove public APIs in minor releases > > and (technically) enforce this rule for all contributions. I think it’s a > > reasonable expectation for stability from a project as mature as Flink. > > > > > I'm personally in favor of option 1. As the migration-period rule is > > newly > > > proposed, I think it's fair to make exceptions for cases where we > already > > > missed the best chance for planning the deprecation. Moreover, I do > > believe > > > having a quick major version bump does confuse users. Yes, we can > explain > > > to users that bumping from 2.x to 3.0 does not cost anything other than > > the > > > removal of an deprecated API. But having to explain this itself is an > > > indicator that it might be confusing for users. > > > > > > > > > Becket, on the other hand, prefers option 2. From my understanding, his > > > major point is that a quick major version bump causes barely any actual > > > lose on users, while in option 1 not providing the migration period or > > > providing a shorter on is an actual lose on users. (@Becket, please > > correct > > > me if I'm mistaken.) > > > > > > > I would be open to both options and maybe postpone this decision until we > > have the complete roadmap for Flink 2.0. We would have a better overview > > about the technical consequences, e.g. how hard it would be to offer and > > maintain both APIs side by side, how well we get both APIs separated, and > > whether or not we will be able to use the full potential of our breaking > > changes before the DataStream API is completely removed. One example for > > the last point I can think of would be moving from lazy to eager state > > declaration. If we believe that it is reasonable to support all planned > > changes while maintaining both APIs, I'm leaning towards option 2. > > > > Best, > > Stefan > > > > > > > On 20. Jun 2023, at 14:43, Xintong Song <tonysong...@gmail.com> wrote: > > > > > > Becket and I had an offline voice call earlier today. We have reached > > > consensus on some of the arguments, but still hold different opinions > on > > > some others. I'd like to post the outcome here for transparency. > > > > > > We both agree that: > > > > > > 1. Providing a migration period would be beneficial for our users, > and > > > we should do that > > > 2. Dropping deprecated Public APIs in minor releases, or demoting > APIs > > > from Public to PublicEvolving / Experimental / Retired in any version > > bump, > > > are not good practices. > > > 3. Ideally, with this FLIP, developers should be more careful and > plan > > > API changes ahead. That means: > > > 1. Be more careful with designing APIs and promoting them to > Public, > > > so that they won't be changed / removed very soon, and also the > > > maintenance overhead for keeping them after deprecation should be > > > affordable. (I believe this also aligns with John's opinion.) > > > 2. Plan the deprecation / removal of old APIs that we don't want > to > > > carry to the next major version earlier, so that they'll have the > > > 2-minor-release migration period before the next major version > bump. > > > 4. A practical situation is that, we are not ready for deprecating > the > > > DataStream API, nor afford to carry it for another couple of years. > > > 1. We cannot deprecate it now, because the new ProcessFunction API > > > (the planned replacement for DataStream API) is not yet ready. We > > haven't > > > planned the ProcessFunction API earlier because the original > > > plan was to do > > > in-place changes directly on the DataStream API in release 2.0, > > until the > > > smooth migration period is proposed. Before this, the only > > guarantees we > > > provide for Public APIs is that they'll stay compatible until the > > next > > > major version, which led to the understanding the in-place changes > > on > > > Public APIs should be fine. > > > 2. We also cannot afford carrying the DataStream API for another > > > couple of years. One of the reasons that we want to refactor / > > replace > > > DataStream API is that it exposes and depends on too many > > > Flink's internal > > > runtime implementations, which has already limited / blocked plans > > for > > > Flink's internal improvements for many times. Also due to the wide > > and > > > transitive dependencies on the internals, maintaining two sets of > > lower > > > APIs itself is expensive and would be better to keep it short. > This > > is > > > admittedly a historical design flaw which should be avoided in > > future. > > > > > > What we haven't reached consensus is about how to deal with the current > > > situation around the DataStream API. There are two options. > > > > > > > > > 1. We say this FLIP is enforced starting release 2.0. For current 1.x > > > APIs, we provide a migration period with best effort, while allowing > > > exceptions for immediate removal in 2.0. That means we will still try > > with > > > best effort to get the ProcessFuncion API ready and deprecate the > > > DataStream API in 1.x, but will also be allowed to remove DataStream > > API in > > > 2.0 if it's not deprecated 2 minor releases before the major version > > bump. > > > 2. We strictly follow the process in this FLIP, and will quickly bump > > > the major version from 2.x to 3.0 once the migration period for > > DataStream > > > API is reached. > > > > > > I'm personally in favor of option 1. As the migration-period rule is > > newly > > > proposed, I think it's fair to make exceptions for cases where we > already > > > missed the best chance for planning the deprecation. Moreover, I do > > believe > > > having a quick major version bump does confuse users. Yes, we can > explain > > > to users that bumping from 2.x to 3.0 does not cost anything other than > > the > > > removal of an deprecated API. But having to explain this itself is an > > > indicator that it might be confusing for users. > > > > > > > > > Becket, on the other hand, prefers option 2. From my understanding, his > > > major point is that a quick major version bump causes barely any actual > > > lose on users, while in option 1 not providing the migration period or > > > providing a shorter on is an actual lose on users. (@Becket, please > > correct > > > me if I'm mistaken.) > > > > > > > > > And we'd like to hear more feedback from the community. > > > > > > > > > Best, > > > > > > Xintong > > > > > > > > > > > > On Tue, Jun 20, 2023 at 2:55 AM John Roesler <vvcep...@apache.org > > <mailto:vvcep...@apache.org>> wrote: > > > > > >> Hi Becket and Xintong, > > >> > > >> I hope you don't mind if I chime in a little. > > >> > > >> Once an API is marked Public, we're committing to support it until > it's > > >> deprecated, and once it's deprecated, to leave it in place for at > least > > two > > >> minor releases and then only remove it in the following major release. > > >> > > >> As a user, I would be dismayed to discover that the project > maintainers > > >> demoted a Public API to PublicEvolving or Experimental in order to > > violate > > >> the spirit of the deprecation period for Public APIs. Likewise, I'd > > view a > > >> rapid sequence of minor releases for the purpose of dropping > deprecated > > >> APIs in the next major release as another violation of the spirit of > our > > >> guarantees. I'm reminded of this xkcd: > > > https://www.google.com/url?q=https://xkcd.com/1494/&source=gmail-imap&ust=1687869831000000&usg=AOvVaw3jFBaXa07_RvXzSLu66f6_ > > >> > > >> I'm glad we're gaming out these situations before we institute this > > FLIP, > > >> and I hope we all converge on a clear understanding of what we're > > >> guaranteeing. From where I'm sitting, the essence of this FLIP is > > >> specifically to prevent us from doing whatever we want and instead to > > >> commit to providing a suitable notice period to users who rely on > Public > > >> APIs. > > >> > > >> It honestly shouldn't matter what the maintenance overhead is (or, > > rather, > > >> evaluating the maintenance overhead should be a consideration before > we > > >> promote an API to Public to begin with). My experience in other > > projects is > > >> that regretting a feature so much you want to drop it asap is > extremely > > >> rare, and that living with the pain for a little while until the > > >> deprecation period expires will probably make us better engineers. > > >> > > >> With that all said, one thing that is not a violation is to propose a > > new > > >> major release in order to drop especially burdensome deprecated APIs > > that > > >> have already enjoyed their full deprecation period. Those really bad > > "case > > >> A" features will be very rare. > > >> > > >> Looking over the FLIP again, I see a reference to the release > > >> documentation, but not to the build tooling support for the Deprecated > > >> annotation, so it might help to share this scenario: The way this will > > all > > >> come together in practice is that, by giving good stability > guarantees, > > we > > >> will encourage our users to bump minor versions when they are > released, > > >> which means that they will see compiler warnings immediately if any of > > the > > >> APIs they've used are deprecated. In fact, I'd recommend for them to > use > > >> the `-Werror` javac flag to be sure that they don't miss those > warnings. > > >> Given our release cadence, this means that they will have about six > > months > > >> to migrate off of any deprecated APIs without being forced to avoid > > >> updates. And they really need to be able to adopt further minor > updates > > in > > >> the series, since they may contain further improvements that actually > > >> facilitate migrating off of the deprecated APIs. > > >> > > >> The compiler warnings are a far more reliable mechanism to advertise > > >> deprecation than release notes, since users' own builds will notify > them > > >> right away about only the deprecations that are relevant to them, but > it > > >> does rely on users feeling ok to bump up minor versions in a timely > > >> fashion. If we consistently burn them by not observing the stability > > >> guarantees, they'll try to avoid updates instead, and the whole thing > > falls > > >> apart. > > >> > > >> Thanks again, > > >> -John > > >> > > >> On 2023/06/19 10:43:05 Becket Qin wrote: > > >>> Hi Xintong, > > >>> > > >>> Let's compare the following cases: > > >>> > > >>> A. If the maintenance overhead of the deprecated API is high, and we > > want > > >>> to remove it after two minor releases. Then there are two options: > > >>> A1: Demote the API in the major version bump and remove the code > > >> with a > > >>> minor version bump. > > >>> A2: Do exactly the same as 1-A, except that when removing the > code, > > >>> bump up the major version. So this might be a short major version. > > >>> > > >>> B. If the maintenance overhead of the deprecated API is not high, > > >> therefore > > >>> keeping it for a long time is affordable. There are also two options: > > >>> B1: Same as A-1, demote the API in the major version bump and > remove > > >>> the code with a minor version bump. > > >>> B2: Keep the API for all the minor versions in the major version, > > and > > >>> only remove the code in the next major version. > > >>> > > >>> For case B, do we agree that B2 is the way to go? > > >>> > > >>> For case A: > > >>> The following stays the same for A1 and A2: > > >>> - users will lose the API after two minor leases. So the migration > > >> period > > >>> is the same for A-1 and A-2. > > >>> - A1 and A2 will have exactly the same code after the removal of > > >>> deprecated API, the only difference is versioning. > > >>> - To move forward, users need to move to the next minor version in > A1, > > >> or > > >>> to the next major version in A2. Because the code are the same, the > > >> actual > > >>> effort to upgrade is the same for A1 and A2. > > >>> > > >>> The differences between A-1 and A-2 are: > > >>> - A1 allows keeping the major version release cadence. A-2 will > have a > > >>> short major version release. > > >>> - A1 breaks the well understood API semantic, while A-2 does not. > > >>> > > >>> From what I see, since there is no well establish standard regarding > > how > > >>> long a major version should be released, A short major version > release > > is > > >>> potential and emotional. It is not ideal but does not have material > > >>> downsides compared with A1. I did not hear anyone complaining about > > Kafka > > >>> only has two 1.x release. However, A1 actually breaks the well > > understood > > >>> API semantic, which has more material impact. > > >>> > > >>> Also, I'd imagine 90% or more of the Public APIs should fall into > case > > B. > > >>> So, short major versions should be very occasional. I'd be very > > concerned > > >>> if the reason we choose A1 is simply because we cannot afford > > >> maintaining a > > >>> bunch of deprecated APIs until the next major version. This indicates > > >> that > > >>> the actual problem we need to solve is to lower the maintenance > > overhead > > >> of > > >>> deprecated APIs, so that we are comfortable to keep them longer. As > > John > > >>> and I mentioned earlier, there are ways to achieve this and we need > to > > >>> learn how to do it in Flink. Otherwise, our discussion about > versioning > > >>> here does not bring much value, because we will end up with a bunch > of > > >>> short-lived APIs which upset our users, no matter how we version the > > >>> releases. > > >>> > > >>> So, if there are concrete examples that you think will block us from > > >>> keeping API stability with affordable cost, let's take a look > together > > >> and > > >>> see if that can be improved. > > >>> > > >>> Thanks, > > >>> > > >>> Jiangjie (Becket) Qin > > >>> > > >>> > > >>> From what I see, > > >>> > > >>> > > >>> On Mon, Jun 19, 2023 at 4:45 PM Xintong Song <tonysong...@gmail.com > > <mailto:tonysong...@gmail.com>> > > >> wrote: > > >>> > > >>>>> > > >>>>> The part I don't understand is if we are willing to have a > migration > > >>>>> period, and do a minor version bump to remove an API, what do we > > >> lose to > > >>>> do > > >>>>> a major version bump instead, so we don't break the common > versioning > > >>>>> semantic? > > >>>>> > > >>>> > > >>>> I think we are talking about the cases where a major version bump > > >> happens > > >>>> before a deprecated Public API reaches its migration period. So > > >> removing > > >>>> the API with another major version bump means we have two > consecutive > > >> major > > >>>> versions in a very short time. And as previously mentioned, having > > >> frequent > > >>>> major version bumps would weaken the value of the commitment "Public > > >> API > > >>>> stay compatible within a major version". I think users also have > > >>>> expectations about how long a major version should live, which > should > > >> be at > > >>>> least a couple of years rather than 1-2 minor releases. > > >>>> > > >>>> This is another option, but I think it is very likely more expensive > > >> than > > >>>>> simply bumping the major version. And I imagine there will be > > >> questions > > >>>>> like "why this feature is in 1.20, but does not exist in 2.0"? > > >>>>> > > >>>> > > >>>> Yes, it's more expensive than simply bumping the major version, but > > >> IMHO > > >>>> it's probably cheaper than carrying the API until the next major > > >> version if > > >>>> we don't bump the major version very soon. And see my reply above on > > >> why > > >>>> not bumping immediately. > > >>>> > > >>>> Best, > > >>>> > > >>>> Xintong > > >>>> > > >>>> > > >>>> > > >>>> On Mon, Jun 19, 2023 at 4:22 PM Becket Qin <becket....@gmail.com > > <mailto:becket....@gmail.com>> > > >> wrote: > > >>>> > > >>>>> Hi Xintong, > > >>>>> > > >>>>> Please see the replies below. > > >>>>> > > >>>>> I see your point, that users would feel surprised if they find > > >> things no > > >>>>>> longer work when upgrading to another 2.x minor release. However, > > >> I'd > > >>>>> like > > >>>>>> to point out that PublicEvolving APIs would have the similar > > >> problem > > >>>>>> anyway. So the question is, how do we catch users' attention and > > >> make > > >>>>> sure > > >>>>>> they are aware that the Public APIs in 1.x may no longer be Public > > >> in > > >>>>> 2.0. > > >>>>>> There're various ways to do that, e.g., release notes, warnings in > > >>>> logs, > > >>>>>> etc. > > >>>>> > > >>>>> First of all, I am not a fan of removing PublicEvolving APIs in > minor > > >>>>> version changes. Personally speaking, I want them to be also > removed > > >> in > > >>>>> major version changes. > > >>>>> > > >>>>> Empirically, I rarely see projects with complex API semantic work > > >> well. > > >>>>> Many, if not most, users don't read docs / release notes / warnings > > >> in > > >>>>> logs. I don't think that is their fault. Typically an application > > >>>> developer > > >>>>> will have to deal with dozens of libraries maintained by various > > >>>>> communities / groups. It is just too difficult for them to keep > > >> track of > > >>>>> all the specific semantics each project puts there. If you think > > >> about > > >>>> it, > > >>>>> how many of Flink developers read all the release notes of Guava, > > >> Apache > > >>>>> Commons, Apache Avro, ProtoBuf, etc, when you upgrade a version of > > >> them? > > >>>>> One would probably try bumping the dependency version and see if > > >> there is > > >>>>> an exception and solve them case by case. And if it is a minor > > >> version > > >>>>> bump, one probably does not expect an exception at all. Another > > >> example > > >>>> is > > >>>>> that in Flink we still have so many usage of deprecated methods all > > >> over > > >>>>> the place, and I strongly doubt everyone knows when the source code > > >> of > > >>>>> these methods are deprecated and when they should be removed. > > >>>>> > > >>>>> So, the most important principle of API is simple and intuitive. > The > > >>>>> versioning semantic is a simple and universally accepted API > > >> stability > > >>>>> standard. If we ourselves as Flink developers are relying on this > > >> for our > > >>>>> own dependencies. I don't think we can expect more from our users. > > >>>>> > > >>>>> Another possible alternative: whenever there's a deprecated Public > > >> API > > >>>> that > > >>>>>> reaches a major version bump before the migration period, and we > > >> also > > >>>>> don't > > >>>>>> want to carry it for all the next major release series, we may > > >> consider > > >>>>>> releasing more minor releases for the previous major version after > > >> the > > >>>>>> bump. E.g., an Public API is deprecated in 1.19, and then we bump > > >> to > > >>>> 2.0, > > >>>>>> we can release one more 1.20 after 2.0. That should provide users > > >>>> another > > >>>>>> choice rather than upgrading to 2.0, while satisfying the > > >>>> 2-minor-release > > >>>>>> migration period. > > >>>>> > > >>>>> This is another option, but I think it is very likely more > expensive > > >> than > > >>>>> simply bumping the major version. And I imagine there will be > > >> questions > > >>>>> like "why this feature is in 1.20, but does not exist in 2.0"? > > >>>>> > > >>>>> I think my major point is, we should not carry APIs deprecated in a > > >>>>>> previous major version along all the next major version series. > I'd > > >>>> like > > >>>>> to > > >>>>>> try giving users more commitments, i.e. the migration period, as > > >> long > > >>>> as > > >>>>> it > > >>>>>> does not prevent us from making breaking changes. If it doesn't > > >> work, > > >>>> I'd > > >>>>>> be in favor of not providing the migration period, but fallback to > > >> only > > >>>>>> guarantee the compatibility within the major version. > > >>>>> > > >>>>> The part I don't understand is if we are willing to have a > migration > > >>>>> period, and do a minor version bump to remove an API, what do we > > >> lose to > > >>>> do > > >>>>> a major version bump instead, so we don't break the common > versioning > > >>>>> semantic? > > >>>>> > > >>>>> Thanks, > > >>>>> > > >>>>> Jiangjie (Becket) Qin > > >>>>> > > >>>>> > > >>>>> On Mon, Jun 19, 2023 at 3:20 PM Xintong Song < > tonysong...@gmail.com > > <mailto:tonysong...@gmail.com>> > > >>>>> wrote: > > >>>>> > > >>>>>>> > > >>>>>>> As an end user who only uses Public APIs, if I don't change my > > >> code > > >>>> at > > >>>>>>> all, my expectation is the following: > > >>>>>>> 1. Upgrading from 1.x to 2.x may have issues. > > >>>>>>> 2. If I can upgrade from 1.x to 2.x without an issue, I am fine > > >> with > > >>>>> all > > >>>>>>> the 2.x versions. > > >>>>>>> Actually I think there are some dependency version resolution > > >>>> policies > > >>>>>> out > > >>>>>>> there which picks the highest minor version when the dependencies > > >>>> pull > > >>>>> in > > >>>>>>> multiple minor versions of the same jar, which may be broken if > > >> we > > >>>>> remove > > >>>>>>> the API in minor releases. > > >>>>>>> > > >>>>>> > > >>>>>> I see your point, that users would feel surprised if they find > > >> things > > >>>> no > > >>>>>> longer work when upgrading to another 2.x minor release. However, > > >> I'd > > >>>>> like > > >>>>>> to point out that PublicEvolving APIs would have the similar > > >> problem > > >>>>>> anyway. So the question is, how do we catch users' attention and > > >> make > > >>>>> sure > > >>>>>> they are aware that the Public APIs in 1.x may no longer be Public > > >> in > > >>>>> 2.0. > > >>>>>> There're various ways to do that, e.g., release notes, warnings in > > >>>> logs, > > >>>>>> etc. > > >>>>>> > > >>>>>> Another possible alternative: whenever there's a deprecated Public > > >> API > > >>>>> that > > >>>>>> reaches a major version bump before the migration period, and we > > >> also > > >>>>> don't > > >>>>>> want to carry it for all the next major release series, we may > > >> consider > > >>>>>> releasing more minor releases for the previous major version after > > >> the > > >>>>>> bump. E.g., an Public API is deprecated in 1.19, and then we bump > > >> to > > >>>> 2.0, > > >>>>>> we can release one more 1.20 after 2.0. That should provide users > > >>>> another > > >>>>>> choice rather than upgrading to 2.0, while satisfying the > > >>>> 2-minor-release > > >>>>>> migration period. > > >>>>>> > > >>>>>> I think my major point is, we should not carry APIs deprecated in > a > > >>>>>> previous major version along all the next major version series. > I'd > > >>>> like > > >>>>> to > > >>>>>> try giving users more commitments, i.e. the migration period, as > > >> long > > >>>> as > > >>>>> it > > >>>>>> does not prevent us from making breaking changes. If it doesn't > > >> work, > > >>>> I'd > > >>>>>> be in favor of not providing the migration period, but fallback to > > >> only > > >>>>>> guarantee the compatibility within the major version. > > >>>>>> > > >>>>>> Best, > > >>>>>> > > >>>>>> Xintong > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> On Mon, Jun 19, 2023 at 10:48 AM John Roesler < > vvcep...@apache.org > > <mailto:vvcep...@apache.org> > > >>> > > >>>>> wrote: > > >>>>>> > > >>>>>>> Hi Becket, > > >>>>>>> > > >>>>>>> Thanks for the reply! I’d like to continue the conversation about > > >>>>>>> compatibility outside of this FLIP thread, but for now, I can > > >> accept > > >>>>> your > > >>>>>>> decision. It’s certainly an improvement. > > >>>>>>> > > >>>>>>> Thanks again, > > >>>>>>> John > > >>>>>>> > > >>>>>>> On Sun, Jun 18, 2023, at 21:42, Becket Qin wrote: > > >>>>>>>> Hi John, > > >>>>>>>> > > >>>>>>>> Completely agree with all you said. > > >>>>>>>> > > >>>>>>>> Can we consider only dropping deprecated APIs in major releases > > >>>>> across > > >>>>>>> the > > >>>>>>>>> board? I understand that Experimental and PublicEvolving APIs > > >> are > > >>>> by > > >>>>>>>>> definition less stable, but it seems like this should be > > >> reflected > > >>>>> in > > >>>>>>> the > > >>>>>>>>> required deprecation period alone. I.e. that we must keep them > > >>>>> around > > >>>>>>> for > > >>>>>>>>> at least zero or one minor release, not that we can drop them > > >> in a > > >>>>>>> minor or > > >>>>>>>>> patch release. > > >>>>>>>> > > >>>>>>>> Personally speaking, I would love to do this, for exactly the > > >>>> reason > > >>>>>> you > > >>>>>>>> mentioned. However, I did not propose this due to the following > > >>>>>> reasons: > > >>>>>>>> > > >>>>>>>> 1. I am hesitating a little bit about changing the accepted > > >> FLIPs > > >>>> too > > >>>>>>> soon. > > >>>>>>>> 2. More importantly, to avoid slowing down our development. At > > >> this > > >>>>>>> point, > > >>>>>>>> Flink still lacks some design / routines to support good API > > >>>>>>> evolvability / > > >>>>>>>> extensibility. Just like you said, it takes some time to be > > >> good at > > >>>>>> this. > > >>>>>>>> In this case, my concern is that only removing Experimental / > > >>>>>>>> PublicEvolving APIs in major version changes may result in too > > >> much > > >>>>>>>> overhead and dramatically slow down the development of Flink. > > >> So, I > > >>>>> was > > >>>>>>>> thinking that we can start with the current status. Hopefully > > >> after > > >>>>> we > > >>>>>>> are > > >>>>>>>> more comfortable with the maintenance overhead of deprecated > > >> APIs, > > >>>> we > > >>>>>> can > > >>>>>>>> then have a stronger guarantee for Experimental / > > >> PublicEvolving > > >>>>> APIs. > > >>>>>>>> > > >>>>>>>> Thanks, > > >>>>>>>> > > >>>>>>>> Jiangjie (Becket) Qin > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> On Sun, Jun 18, 2023 at 6:44 AM John Roesler < > > >> vvcep...@apache.org <mailto:vvcep...@apache.org>> > > >>>>>>> wrote: > > >>>>>>>> > > >>>>>>>>> Hi Becket, > > >>>>>>>>> > > >>>>>>>>> Thanks for this FLIP! Having a deprecation process is really > > >>>>>> important. > > >>>>>>> I > > >>>>>>>>> understand some people’s concerns about the additional burden > > >> for > > >>>>>>> project > > >>>>>>>>> maintainers, but my personal experience with Kafka has been > > >> that > > >>>>> it’s > > >>>>>>> very > > >>>>>>>>> liveable and that it’s well worth the benefit to users. In > > >> fact, > > >>>>> users > > >>>>>>>>> being able to confidently upgrade is also a benefit to > > >>>> maintainers, > > >>>>> as > > >>>>>>> we > > >>>>>>>>> will get fewer questions from people stuck on very old > > >> versions. > > >>>>>>>>> > > >>>>>>>>> One question: > > >>>>>>>>> Can we consider only dropping deprecated APIs in major > > >> releases > > >>>>> across > > >>>>>>> the > > >>>>>>>>> board? I understand that Experimental and PublicEvolving APIs > > >> are > > >>>> by > > >>>>>>>>> definition less stable, but it seems like this should be > > >> reflected > > >>>>> in > > >>>>>>> the > > >>>>>>>>> required deprecation period alone. I.e. that we must keep them > > >>>>> around > > >>>>>>> for > > >>>>>>>>> at least zero or one minor release, not that we can drop them > > >> in a > > >>>>>>> minor or > > >>>>>>>>> patch release. > > >>>>>>>>> > > >>>>>>>>> The advantage of forbidding the removal of any API in minor or > > >>>> patch > > >>>>>>>>> releases is that users will get a strong guarantee that they > > >> can > > >>>>> bump > > >>>>>>> the > > >>>>>>>>> minor or patch version and still be able to compile, or even > > >> just > > >>>>>>> re-link > > >>>>>>>>> and know that they won’t face “MethodDef” exceptions at run > > >> time. > > >>>>> This > > >>>>>>> is a > > >>>>>>>>> binary guarantee: if we allow removing even Experimental APIs > > >>>>> outside > > >>>>>>> of > > >>>>>>>>> major releases, users can no longer confidently upgrade. > > >>>>>>>>> > > >>>>>>>>> Aside from that, I’d share my 2 cents on a couple of points: > > >>>>>>>>> * I’d use the official Deprecated annotation instead of > > >>>> introducing > > >>>>>> our > > >>>>>>>>> own flavor (Retired, etc), since Deprecated is well integrated > > >>>> into > > >>>>>>> build > > >>>>>>>>> tools and IDEs. > > >>>>>>>>> * I wouldn’t worry about a demotion process in this FLIP; it > > >> seems > > >>>>>>>>> orthogonal, and something that should probably be taken > > >>>> case-by-case > > >>>>>>>>> anyway. > > >>>>>>>>> * Aside from deprecation and removal, there have been some > > >>>>> discussions > > >>>>>>>>> about how to evolve APIs and behavior in compatible ways. > > >> This is > > >>>>>>> somewhat > > >>>>>>>>> of an art, and if folks haven’t wrestled with it before, it’ll > > >>>> take > > >>>>>> some > > >>>>>>>>> time to become good at it. I feel like this topic should also > > >> be > > >>>>>>> orthogonal > > >>>>>>>>> to this FLIP, but FWIW, my suggestion would be to adopt a > > >> simple > > >>>>>> policy > > >>>>>>> not > > >>>>>>>>> to break existing user programs, and leave the “how” up to > > >>>>>> implementers > > >>>>>>> and > > >>>>>>>>> reviewers. > > >>>>>>>>> > > >>>>>>>>> Thanks again, > > >>>>>>>>> John > > >>>>>>>>> > > >>>>>>>>> On Sat, Jun 17, 2023, at 11:03, Jing Ge wrote: > > >>>>>>>>>> Hi All, > > >>>>>>>>>> > > >>>>>>>>>> The @Public -> @PublicEvolving proposed by Xintong is a > > >> great > > >>>>> idea. > > >>>>>>>>>> Especially, after he suggest @PublicRetired, i.e. > > >>>> @PublicEvolving > > >>>>>> --(2 > > >>>>>>>>>> minor release)--> @Public --> @deprecated --(1 major > > >>>>>>>>>> release)--> @PublicRetired. It will provide a lot of > > >> flexibility > > >>>>>>> without > > >>>>>>>>>> breaking any rules we had. @Public APIs are allowed to > > >> change > > >>>>>> between > > >>>>>>>>> major > > >>>>>>>>>> releases. Changing annotations is acceptable and provides > > >>>>> additional > > >>>>>>>>>> tolerance i.e. user-friendliness, since the APIs themself > > >> are > > >>>> not > > >>>>>>>>> changed. > > >>>>>>>>>> > > >>>>>>>>>> I had similar thoughts when I was facing those issues. I > > >> want to > > >>>>>> move > > >>>>>>> one > > >>>>>>>>>> step further and suggest introducing one more annotation > > >>>> @Retired. > > >>>>>>>>>> > > >>>>>>>>>> Not like the @PublicRetired which is a compromise of > > >> downgrading > > >>>>>>> @Public > > >>>>>>>>> to > > >>>>>>>>>> @PublicEvolving. As I mentioned earlier in my reply, Java > > >>>> standard > > >>>>>>>>>> @deprecated should be used in the early stage of the > > >> deprecation > > >>>>>>> process > > >>>>>>>>>> and doesn't really meet our requirement. Since Java does not > > >>>> allow > > >>>>>> us > > >>>>>>> to > > >>>>>>>>>> extend annotation, I think it would be feasible to have the > > >> new > > >>>>>>> @Retired > > >>>>>>>>> to > > >>>>>>>>>> help us monitor and manage the deprecation process, house > > >>>>> cleaning, > > >>>>>>> etc. > > >>>>>>>>>> > > >>>>>>>>>> Some ideas could be(open for discussion): > > >>>>>>>>>> > > >>>>>>>>>> @Retired: > > >>>>>>>>>> > > >>>>>>>>>> 1. There must be a replacement with functionality > > >> compatibility > > >>>>>> before > > >>>>>>>>> APIs > > >>>>>>>>>> can be marked as @Retired, i.e. DISCUSS and VOTE processes > > >> on > > >>>> the > > >>>>> ML > > >>>>>>> are > > >>>>>>>>>> mandatory (a FLIP is recommended). > > >>>>>>>>>> 2. APIs marked as @Retired will be removed after 1 minor > > >> release > > >>>>>>> sharply > > >>>>>>>>>> (using ArchUnit to force it, needs further check whether it > > >> is > > >>>>>>> possible). > > >>>>>>>>>> Devs who marked them as @Retired are responsible to remove > > >> them. > > >>>>>>>>>> 3. Both @Public -> @Retired and @PublicEvolving -> @Retired > > >> are > > >>>>>>>>>> recommended. @Experimental -> @Retired and @Internal -> > > >> @Retired > > >>>>>> could > > >>>>>>>>> also > > >>>>>>>>>> be used if it can increase user-friendliness or > > >>>> dev-friendliness, > > >>>>>> but > > >>>>>>> not > > >>>>>>>>>> mandatory. > > >>>>>>>>>> 4. Some variables will be defined in @Retired to support the > > >>>>>>> deprecation > > >>>>>>>>>> process management. Further extension is possible, since the > > >>>>>>> annotation > > >>>>>>>>> is > > >>>>>>>>>> built by us. > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> Best regards, > > >>>>>>>>>> Jing > > >>>>>>>>>> > > >>>>>>>>>> On Fri, Jun 16, 2023 at 10:31 AM Becket Qin < > > >>>> becket....@gmail.com <mailto:becket....@gmail.com> > > >>>>>> > > >>>>>>>>> wrote: > > >>>>>>>>>> > > >>>>>>>>>>> Hi Xintong, > > >>>>>>>>>>> > > >>>>>>>>>>> Thanks for the explanation. Please see the replies inline > > >>>> below. > > >>>>>>>>>>> > > >>>>>>>>>>> I agree. And from my understanding, demoting a Public API > > >> is > > >>>>> also a > > >>>>>>>>> kind of > > >>>>>>>>>>>> such change, just like removing one, which can only > > >> happen > > >>>> with > > >>>>>>> major > > >>>>>>>>>>>> version bumps. I'm not proposing to allow demoting Public > > >>>> APIs > > >>>>>>>>> anytime, > > >>>>>>>>>>> but > > >>>>>>>>>>>> only in the case major version bumps happen before > > >> reaching > > >>>> the > > >>>>>>>>>>>> 2-minor-release migration period. Actually, demoting > > >> would > > >>>> be a > > >>>>>>> weaker > > >>>>>>>>>>>> change compared to removing the API immediately upon > > >> major > > >>>>>> version > > >>>>>>>>> bumps, > > >>>>>>>>>>>> in order to keep the commitment about the 2-minor-release > > >>>>>> migration > > >>>>>>>>>>> period. > > >>>>>>>>>>>> If the concern is that `@Public` -> `@PublicEvolving` > > >> sounds > > >>>>>>> against > > >>>>>>>>>>>> conventions, we may introduce a new annotation if > > >> necessary, > > >>>>>> e.g., > > >>>>>>>>>>>> `@PublicRetiring`, to avoid confusions. > > >>>>>>>>>>> > > >>>>>>>>>>> As an end user who only uses Public APIs, if I don't > > >> change my > > >>>>> code > > >>>>>>> at > > >>>>>>>>> all, > > >>>>>>>>>>> my expectation is the following: > > >>>>>>>>>>> 1. Upgrading from 1.x to 2.x may have issues. > > >>>>>>>>>>> 2. If I can upgrade from 1.x to 2.x without an issue, I am > > >> fine > > >>>>>> with > > >>>>>>> all > > >>>>>>>>>>> the 2.x versions. > > >>>>>>>>>>> Actually I think there are some dependency version > > >> resolution > > >>>>>>> policies > > >>>>>>>>> out > > >>>>>>>>>>> there which picks the highest minor version when the > > >>>> dependencies > > >>>>>>> pull > > >>>>>>>>> in > > >>>>>>>>>>> multiple minor versions of the same jar, which may be > > >> broken if > > >>>>> we > > >>>>>>>>> remove > > >>>>>>>>>>> the API in minor releases. > > >>>>>>>>>>> > > >>>>>>>>>>> I'm not sure about this. Yes, it's completely "legal" that > > >> we > > >>>>> bump > > >>>>>> up > > >>>>>>>>> the > > >>>>>>>>>>>> major version whenever a breaking change is needed. > > >> However, > > >>>>> this > > >>>>>>> also > > >>>>>>>>>>>> weakens the value of the commitment that public APIs will > > >>>> stay > > >>>>>>> stable > > >>>>>>>>>>>> within the major release series, as the series can end > > >>>> anytime. > > >>>>>>> IMHO, > > >>>>>>>>>>> short > > >>>>>>>>>>>> major release series are not something "make the end > > >> users > > >>>>>> happy", > > >>>>>>> but > > >>>>>>>>>>>> backdoors that allow us as the developers to make > > >> frequent > > >>>>>> breaking > > >>>>>>>>>>>> changes. On the contrary, with the demoting approach, we > > >> can > > >>>>>> still > > >>>>>>>>> have > > >>>>>>>>>>>> longer major release series, while only allowing Public > > >> APIs > > >>>>>>>>> deprecated > > >>>>>>>>>>> at > > >>>>>>>>>>>> the end of the previous major version to be removed in > > >> the > > >>>> next > > >>>>>>> major > > >>>>>>>>>>>> version. > > >>>>>>>>>>> > > >>>>>>>>>>> I totally agree that frequent major version bumps are not > > >>>> ideal, > > >>>>>> but > > >>>>>>>>> here > > >>>>>>>>>>> we are comparing it with a minor version bump which > > >> removes a > > >>>>>> Public > > >>>>>>>>> API. > > >>>>>>>>>>> So the context is that we have already decided to remove > > >> this > > >>>>>> Public > > >>>>>>> API > > >>>>>>>>>>> while keeping everything else backwards compatible. I > > >> think a > > >>>>> major > > >>>>>>>>> version > > >>>>>>>>>>> bump is a commonly understood signal here, compared with a > > >>>> minor > > >>>>>>> version > > >>>>>>>>>>> change. From end users' perspective, for those who are not > > >>>>>> impacted, > > >>>>>>> in > > >>>>>>>>>>> this case upgrading a major version is not necessarily more > > >>>>>> involved > > >>>>>>>>> than > > >>>>>>>>>>> upgrading a minor version - both should be as smooth as a > > >>>>>> dependency > > >>>>>>>>>>> version change. For those who are impacted, they will lose > > >> the > > >>>>>> Public > > >>>>>>>>> API > > >>>>>>>>>>> anyways and a major version bump ensures there is no > > >> surprise. > > >>>>>>>>>>> > > >>>>>>>>>>> Thanks, > > >>>>>>>>>>> > > >>>>>>>>>>> Jiangjie (Becket) Qin > > >>>>>>>>>>> > > >>>>>>>>>>> On Fri, Jun 16, 2023 at 10:13 AM Xintong Song < > > >>>>>> tonysong...@gmail.com <mailto:tonysong...@gmail.com> > > >>>>>>>> > > >>>>>>>>>>> wrote: > > >>>>>>>>>>> > > >>>>>>>>>>>> Public API is a well defined common concept, and one of > > >> its > > >>>>>>>>>>>>> convention is that it only changes with a major version > > >>>>> change. > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> I agree. And from my understanding, demoting a Public > > >> API is > > >>>>>> also a > > >>>>>>>>> kind > > >>>>>>>>>>>> of such change, just like removing one, which can only > > >> happen > > >>>>>> with > > >>>>>>>>> major > > >>>>>>>>>>>> version bumps. I'm not proposing to allow demoting Public > > >>>> APIs > > >>>>>>>>> anytime, > > >>>>>>>>>>> but > > >>>>>>>>>>>> only in the case major version bumps happen before > > >> reaching > > >>>> the > > >>>>>>>>>>>> 2-minor-release migration period. Actually, demoting > > >> would > > >>>> be a > > >>>>>>> weaker > > >>>>>>>>>>>> change compared to removing the API immediately upon > > >> major > > >>>>>> version > > >>>>>>>>> bumps, > > >>>>>>>>>>>> in order to keep the commitment about the 2-minor-release > > >>>>>> migration > > >>>>>>>>>>> period. > > >>>>>>>>>>>> If the concern is that `@Public` -> `@PublicEvolving` > > >> sounds > > >>>>>>> against > > >>>>>>>>>>>> conventions, we may introduce a new annotation if > > >> necessary, > > >>>>>> e.g., > > >>>>>>>>>>>> `@PublicRetiring`, to avoid confusions. > > >>>>>>>>>>>> > > >>>>>>>>>>>> But it should be > > >>>>>>>>>>>>> completely OK to bump up the major version if we really > > >> want > > >>>>> to > > >>>>>>> get > > >>>>>>>>> rid > > >>>>>>>>>>> of > > >>>>>>>>>>>>> a public API, right? > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> I'm not sure about this. Yes, it's completely "legal" > > >> that we > > >>>>>> bump > > >>>>>>> up > > >>>>>>>>> the > > >>>>>>>>>>>> major version whenever a breaking change is needed. > > >> However, > > >>>>> this > > >>>>>>> also > > >>>>>>>>>>>> weakens the value of the commitment that public APIs will > > >>>> stay > > >>>>>>> stable > > >>>>>>>>>>>> within the major release series, as the series can end > > >>>> anytime. > > >>>>>>> IMHO, > > >>>>>>>>>>> short > > >>>>>>>>>>>> major release series are not something "make the end > > >> users > > >>>>>> happy", > > >>>>>>> but > > >>>>>>>>>>>> backdoors that allow us as the developers to make > > >> frequent > > >>>>>> breaking > > >>>>>>>>>>>> changes. On the contrary, with the demoting approach, we > > >> can > > >>>>>> still > > >>>>>>>>> have > > >>>>>>>>>>>> longer major release series, while only allowing Public > > >> APIs > > >>>>>>>>> deprecated > > >>>>>>>>>>> at > > >>>>>>>>>>>> the end of the previous major version to be removed in > > >> the > > >>>> next > > >>>>>>> major > > >>>>>>>>>>>> version. > > >>>>>>>>>>>> > > >>>>>>>>>>>> Given our track record I would prefer a regular cycle > > >> (1-2 > > >>>>> years) > > >>>>>>> to > > >>>>>>>>>>>>> force us to think about this whole topic, and not put it > > >>>> again > > >>>>>> to > > >>>>>>> the > > >>>>>>>>>>>>> wayside and giving us (and users) a clear expectation on > > >>>> when > > >>>>>>>>> breaking > > >>>>>>>>>>>>> changes can be made. > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> +1. I personally think 2-3 years would be a good time > > >> for new > > >>>>>> major > > >>>>>>>>>>>> versions, or longer if there's no breaking changes > > >> needed. > > >>>> That > > >>>>>>> makes > > >>>>>>>>> 1-2 > > >>>>>>>>>>>> year a perfect time to revisit the topic, while leaving > > >> us > > >>>> more > > >>>>>>> time > > >>>>>>>>> to > > >>>>>>>>>>>> prepare the major release if needed. > > >>>>>>>>>>>> > > >>>>>>>>>>>> Best, > > >>>>>>>>>>>> > > >>>>>>>>>>>> Xintong > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> On Thu, Jun 15, 2023 at 10:09 PM Chesnay Schepler < > > >>>>>>> ches...@apache.org <mailto:ches...@apache.org> > > >>>>>>>>>> > > >>>>>>>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>>> On 13/06/2023 17:26, Becket Qin wrote: > > >>>>>>>>>>>>>> It would be valuable if we can avoid releasing minor > > >>>>> versions > > >>>>>>> for > > >>>>>>>>>>>>> previous > > >>>>>>>>>>>>>> major versions. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On paper, /absolutely /agree, but I'm not sure how > > >> viable > > >>>> that > > >>>>>> is > > >>>>>>> in > > >>>>>>>>>>>>> practice. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On the current 2.0 agenda is potentially dropping > > >> support > > >>>> for > > >>>>>> Java > > >>>>>>>>> 8/11, > > >>>>>>>>>>>>> which may very well be a problem for our current users. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On 13/06/2023 17:26, Becket Qin wrote: > > >>>>>>>>>>>>>> Thanks for the feedback and sorry for the confusion > > >> about > > >>>>>> Public > > >>>>>>>>> API > > >>>>>>>>>>>>>> deprecation. I just noticed that there was a mistake > > >> in > > >>>> the > > >>>>>>> NOTES > > >>>>>>>>> part > > >>>>>>>>>>>>> for > > >>>>>>>>>>>>>> Public API due to a copy-paste error... I just fixed > > >> it. > > >>>>>>>>>>>>> I'm very relieved to hear that. Glad to hear that we > > >> are on > > >>>>> the > > >>>>>>> same > > >>>>>>>>>>>>> page on that note. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On 15/06/2023 15:20, Becket Qin wrote: > > >>>>>>>>>>>>>> But it should be > > >>>>>>>>>>>>>> completely OK to bump up the major version if we > > >> really > > >>>> want > > >>>>>> to > > >>>>>>> get > > >>>>>>>>>>> rid > > >>>>>>>>>>>>> of > > >>>>>>>>>>>>>> a public API, right? > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Technically yes, but look at how long it took to get us > > >> to > > >>>>> 2.0. > > >>>>>> ;) > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> There's a separate discussion to be had on the cadence > > >> of > > >>>>> major > > >>>>>>>>> releases > > >>>>>>>>>>>>> going forward, and there seem to be different opinions > > >> on > > >>>>> that. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> If we take the Kafka example of 2 minor releases between > > >>>> major > > >>>>>>> ones, > > >>>>>>>>>>>>> that for us means that users have to potentially deal > > >> with > > >>>>>>> breaking > > >>>>>>>>>>>>> changes every 6 months, which seems like a lot. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Given our track record I would prefer a regular cycle > > >> (1-2 > > >>>>>> years) > > >>>>>>> to > > >>>>>>>>>>>>> force us to think about this whole topic, and not put it > > >>>> again > > >>>>>> to > > >>>>>>> the > > >>>>>>>>>>>>> wayside and giving us (and users) a clear expectation on > > >>>> when > > >>>>>>>>> breaking > > >>>>>>>>>>>>> changes can be made. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> But again, maybe this should be in a separate thread. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On 14/06/2023 11:37, Becket Qin wrote: > > >>>>>>>>>>>>>> Do you have an example of behavioral change in mind? > > >> Not > > >>>>> sure > > >>>>>> I > > >>>>>>>>> fully > > >>>>>>>>>>>>>> understand the concern for behavioral change here. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> This could be a lot of things. It can be performance in > > >>>>> certain > > >>>>>>>>>>>>> edge-cases, a bug fix that users (maybe unknowingly) > > >> relied > > >>>>> upon > > >>>>>>>>>>>>> ( > > > https://www.google.com/url?q=https://xkcd.com/1172/&source=gmail-imap&ust=1687869831000000&usg=AOvVaw2QkbaBd4VKyCsxxFcv1S4I > ), > > a semantic change to some > > >> API. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> For a concrete example, consider the job submission. A > > >> few > > >>>>>>> releases > > >>>>>>>>> back > > >>>>>>>>>>>>> we made changes such that the initialization of the job > > >>>> master > > >>>>>>>>> happens > > >>>>>>>>>>>>> asynchronously. > > >>>>>>>>>>>>> This meant the job submission call returns sooner, and > > >> the > > >>>> job > > >>>>>>> state > > >>>>>>>>>>>>> enum was extended to cover this state. > > >>>>>>>>>>>>> API-wise we consider this a compatible change, but the > > >>>>> observed > > >>>>>>>>> behavior > > >>>>>>>>>>>>> may be different. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Metrics are another example; I believe over time we > > >> changed > > >>>>> what > > >>>>>>> some > > >>>>>>>>>>>>> metrics returned a few times. > > > > >