Hi Martijn, Thanks for the reply. Regarding the behavioral stability guarantee, by definition, an "API" always consists of the signature + behavior. So, the behavior is a native part of an API. Therefore, behavioral changes should be treated with the same guarantee as signature changes.
+1 on having toolings to enforce the conventions. Thanks, Jiangjie (Becket) Qin On Wed, Jun 28, 2023 at 5:09 AM Martijn Visser <martijnvis...@apache.org> wrote: > Hi all, > > Thanks for the lively and good discussion. Given the length of the > discussion, I skimmed through and then did a deep dive on the latest state > of the FLIP. I think the FLIP is overall in a good state and ready to bring > to a vote. > > One thing that I did notice while skimming through the discussions is that > I think there are some follow-ups that could be worthy of a FLIP and a > discussion. For example, if/what/how does the Flink community offer any > behavioral stability guarantees, or other types of expectations and > guarantees. I also do think that we must have tooling in place to implement > this FLIP (and also FLIP-196 and FLIP-197), to avoid that we're not > creating a policy on paper, but also have the means to enforce it. Last but > not least, I echo Jark's point that we can't estimate maintenance cost with > a concrete design and code/POC. For me, that means that a contributor can > choose to propose a deviation, but that the contributor would need to > explicitly mention it in the FLIP and get it discussed/voted on as part of > the FLIP process. But the starting point is as defined in this and other > relevant FLIPs. > > Best regards, > > Martijn > > On Tue, Jun 27, 2023 at 3:38 AM Becket Qin <becket....@gmail.com> wrote: > > > Hi Xintong, Jark and Jing, > > > > Thanks for the reply. Yes, we can only mark the DataStream API as > > @Deprecated after the ProcessFunction API is fully functional and mature. > > > > It is a fair point that the condition of marking a @Public API as > > deprecated should also be a part of this FLIP. I just added that to the > > FLIP wiki. This is probably more of a clarification on the existing > > convention, rather than a change. > > > > It looks like we are on the same page now for this FLIP. If so, I'll > start > > a VOTE thread in two days. > > > > Thanks, > > > > Jiangjie (Becket) Qin > > > > On Mon, Jun 26, 2023 at 8:09 PM Xintong Song <tonysong...@gmail.com> > > wrote: > > > > > > > > > > Considering DataStream API is the most fundamental and complex API of > > > > Flink, I think it is worth a longer time than the general process for > > the > > > > deprecation period to wait for the new API be mature. > > > > > > > > > > This inspires me. In this specific case, compared to how long should > > > DataStream API be removed after deprecation, it's probably more > important > > > to answer the question how long would ProcessFunction API become mature > > and > > > stable after being introduced. According to FLIP-197[1], it requires 4 > > > minor releases by default to promote an @Experimental API to @Public. > And > > > for ProcessFunction API, which aims to replace DataStream API as one of > > the > > > most fundamental API of Flink, I'd expect this to take at least the > > default > > > time, or even longer. And we probably should wait until we believe > > > ProcessFunction API is stable to mark DataStream API as deprecated, > > rather > > > than as soon as it's introduced. Assuming we introduce the > > ProcessFunction > > > API in 2.0, that means we would need to wait for 6 minor releases (4 > for > > > the new API to become stable, and 2 for the migration period) to remove > > > DataStream API, which is ~2.5 year (assuming 5 months / minor release), > > > which sounds acceptable for another major version bump. > > > > > > To wrap things up, it seems to me, sadly, that anyway we cannot avoid > the > > > overhead for maintaining both DataStream & ProcessFunction APIs for at > > > least 6 minor releases. > > > > > > Best, > > > > > > Xintong > > > > > > > > > [1] > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-197%3A+API+stability+graduation+process > > > > > > > > > > > > On Mon, Jun 26, 2023 at 5:41 PM Jing Ge <j...@ververica.com.invalid> > > > wrote: > > > > > > > Hi all, > > > > > > > > Just want to make sure we are on the same page. There is another > > > example[1] > > > > I was aware of recently that shows why more factors need to be taken > > care > > > > of than just the migration period. Thanks Galen for your hint. > > > > > > > > To put it simply, the concern about API deprecation is not that > > > deprecated > > > > APIs have been removed too early (min migration period is required). > > The > > > > major concern is that APIs are marked as deprecated for a (too) long > > > time, > > > > much longer than the migration period discussed in this thread, > afaik. > > > > Since there is no clear picture/definition, no one knows when to do > the > > > > migration for users(after the migration period has expired) and when > to > > > > remove deprecated APIs for Flink developers. > > > > > > > > Based on all the information I knew, there are two kinds of obstacles > > > that > > > > will and should block the deprecation process: > > > > > > > > 1. Lack of functionalities in new APIs. It happens e.g. with the > > > > SourceFunction to FLIP-27 Source migration. Users who rely on those > > > > functions can not migrate to new APIs. > > > > 2. new APIs have critical bugs. An example could be found at [1]. > Users > > > > have to stick to the deprecated APIs. > > > > > > > > Since FLIP-321 is focusing on the API deprecation process, those > > blocking > > > > issues deserve attention and should be put into the FLIP. The current > > > FLIP > > > > seems to only focus on migration periods. If we consider those > blocking > > > > issues as orthogonal issues that are beyond the scope of this > > discussion, > > > > does it make sense to change the FLIP title to something like > > "Introduce > > > > minimum migration periods of API deprecation process"? > > > > > > > > Best regards, > > > > Jing > > > > > > > > [1] https://lists.apache.org/thread/wxoo7py5pqqlz37l4w8jrq6qdvsdq5wc > > > > > > > > On Sun, Jun 25, 2023 at 2:01 PM Jark Wu <imj...@gmail.com> wrote: > > > > > > > > > I agree with Jingsong and Becket. > > > > > > > > > > Look at the legacy SourceFunction (a small part of DataStream API), > > > > > the SourceFunction is still not and can't be marked deprecated[1] > > until > > > > > now after the new Source was released 2 years ago, because the new > > > Source > > > > > still can't fully consume the abilities of legacy API. Considering > > > > > DataStream > > > > > API is the most fundamental and complex API of Flink, I think it is > > > worth > > > > > a longer time than the general process for the deprecation period > to > > > > > wait for the new API be mature. The above 2 options sound a bit of > > rush > > > > > for such a widely used API. > > > > > > > > > > I fully understand the concern of maintenance overhead, but it's a > > bit > > > > hard > > > > > for others to estimate maintenance costs without a concrete design > > and > > > > code > > > > > of the new ProcessFunction API. I agree with Becket that maybe we > can > > > > > re-evaluate the API deprecation process once we have the new > > > > > ProcessFunction > > > > > API. If the maintenance is indeed huge, I think it is reasonable to > > > have > > > > a > > > > > special rule for this case at that time. > > > > > > > > > > Best, > > > > > Jark > > > > > > > > > > > > > > > [1]: https://issues.apache.org/jira/browse/FLINK-28045 > > > > > > > > > > On Sun, 25 Jun 2023 at 16:22, Becket Qin <becket....@gmail.com> > > wrote: > > > > > > > > > > > Hi Jingsong, > > > > > > > > > > > > Thanks for the reply. I completely agree with you. > > > > > > > > > > > > The above 2 options are based on the assumption that the > community > > > > cannot > > > > > > afford to maintain the deprecated DataStream API for long. I'd > say > > we > > > > > > should try everything we can to maintain it for as much time as > > > > possible. > > > > > > DataStream API is actually the most used API in Flink by so many > > > users > > > > at > > > > > > this point. Removing it any time soon will dramatically hurt our > > > users. > > > > > So > > > > > > ideally we should keep it for at least 2 years after deprecation, > > if > > > > not > > > > > > more. > > > > > > > > > > > > The prohibitively high maintenance overhead is just an > assumption. > > > > > > Personally speaking, I don't feel this assumption is necessarily > > > true. > > > > We > > > > > > should re-evaluate once we have the new ProcessFunction API in > > place. > > > > > > Without the code it is hard to tell for sure. I am actually kind > of > > > > > > optimistic about the maintenance cost. > > > > > > > > > > > > Thanks, > > > > > > > > > > > > Jiangjie (Becket) Qin > > > > > > > > > > > > > > > > > > > > > > > > On Sun, Jun 25, 2023 at 11:30 AM Jingsong Li < > > jingsongl...@gmail.com > > > > > > > > > > wrote: > > > > > > > > > > > > > Thanks Becket and all for your discussion. > > > > > > > > > > > > > > > 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. > > > > > > > > > > > > > > Sorry, I didn't read the previous detailed discussion because > the > > > > > > > discussion list was so long. > > > > > > > > > > > > > > I don't really like either of these options. > > > > > > > > > > > > > > Considering that DataStream is such an important API, can we > > offer > > > a > > > > > > third > > > > > > > option: > > > > > > > > > > > > > > 3. Maintain the DataStream API throughout 2.X and remove it > until > > > > 3.x. > > > > > > But > > > > > > > there's no need to assume that 2.X is a short version, it's > > still a > > > > > > normal > > > > > > > major version. > > > > > > > > > > > > > > Best, > > > > > > > Jingsong > > > > > > > > > > > > > > Becket Qin <becket....@gmail.com>于2023年6月22日 周四16:02写道: > > > > > > > > > > > > > > > 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. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >