On Wed, Apr 24, 2019 at 9:04 PM Yu Li <car...@gmail.com> wrote: > ... > Thirdly, besides API deprecation, I think we should also discuss about the > rule for feature deprecation. We ever deprecated DLR, I could observe some > discussion on deprecating preemptive fast fail recently, and personally I > think there're some more features with few usage but making code base > complicated. > > I like this suggestion. Lets start a new topic on stuff to remove.
Thanks Yu Li, S > Lastly, I think we need to emphasize on adding the incompatible flag and > release note to JIRA and updating document whenever a deprecated > feature/API is removed, which IMHO is not followed quite well recently. > > Thanks. > > Best Regards, > Yu > > > On Thu, 25 Apr 2019 at 10:24, 张铎(Duo Zhang) <palomino...@gmail.com> wrote: > > > Let's get a conclusion here? > > > > By default, we should try our best to keep the deprecated APIs for at > least > > a whole major release. All committers should have this in mind, when > there > > is patch which deprecates a public API, we should make sure that there is > > a @deprecated javadoc comment says on which version it is deprecated, and > > on which version it is expected to be removed. > > > > And due to the difficulties in real world, if you think the above rule > > makes it really hard to maintain a clean and stable code base, you can > > break the rule. But you should have a strong enough reason, and also, a > > nice written release note, and also update the upgrading section in our > ref > > guide. > > > > Is this OK? > > > > Thanks. > > > > 张铎(Duo Zhang) <palomino...@gmail.com> 于2019年4月24日周三 下午2:38写道: > > > > > Phoenix is a good example I'd say, we have done a lot of CP related > > > changes before releasing 2.0.0. But until now, Phoenix still has > troubles > > > to work together with 2.x, although we have already fixed several > > > compatibility issues... It shows that, usually people will take much > care > > > on the alpha and beta releases... > > > > > > Reid Chan <reidddc...@outlook.com> 于2019年4月24日周三 上午10:58写道: > > > > > >> > > >> As a strong coupling system to HBase, Phoenix has always been the > first > > >> sufferer, not only client APIs, but also some internal APIs. > > >> Maybe we can ask Phoenix dev team what do they think, and get some > > >> thoughts from them. > > >> > > >> > > >> -------------------------- > > >> > > >> Best regards, > > >> R.C > > >> > > >> > > >> > > >> ________________________________________ > > >> From: Sean Busbey <bus...@apache.org> > > >> Sent: 24 April 2019 10:16 > > >> To: dev > > >> Subject: Re: [DISCUSS] Handling removal of deprecated methods and > > classes > > >> > > >> Isn't API stabilization what we have alpha and beta releases for? > > >> > > >> There was nearly a year between the first alpha version of 2.0.0 and > the > > >> GA > > >> release. Surely that should be a reasonable window for "trying out" a > > new > > >> major release. > > >> > > >> I don't like the idea of telling our downstreamers that they can't > > >> "really" > > >> use or rely on our major releases until several minor releases in. > > Either > > >> we should say "API locks at X.0.0" or we should say "any API change > > might > > >> happen at a major version". > > >> > > >> We can always document what went away between minor releases even if > we > > >> can't give a compile time warning in advance (e.g. for the 2.0.0 to > > 3.0.0 > > >> user in your example Duo). > > >> > > >> We ended up trying to do that for 2.0.0 because so much had changed > from > > >> 1.0.0. > > >> > > >> > > >> On Tue, Apr 23, 2019, 20:51 张铎(Duo Zhang) <palomino...@gmail.com> > > wrote: > > >> > > >> > Ideally, we'd better keep the deprecated APIs for at least a whole > > major > > >> > version, that means user can upgrade to a new major release from any > > >> minor > > >> > releases, without seeing the removal of any non-deprecated APIs. > > >> > > > >> > For example, if we deprecate a method in 2.1.0, and remove it in > > 3.0.0, > > >> > then the users who upgrade to 3.0.0 from 2.0.0 will see the removal > of > > >> this > > >> > method, although the method is not deprecated on 2.0.0. > > >> > > > >> > But considering the current status of our project(as Sean mentioned > > >> above), > > >> > I do not think it is a good idea to fully follow the rule. One more > > >> thing > > >> > is that, for a new major release, usually the code base is not > stable > > >> > enough, need to be polished. Ideally it will be stable enough after > > one > > >> or > > >> > two minor releases. This means we will introduced new APIs and > > >> deprecated > > >> > old APIs in these minor releases. I think this is because that we do > > not > > >> > have enough test before making a new major release, but this is a > dead > > >> lock > > >> > problem. If we do not publish a new major release, users will not > try > > it > > >> > which means we can not get enough test, since HBase is widely used > > >> > everywhere and the release manager can only test a small set of core > > >> > features... > > >> > > > >> > For me, I think a better way is to not follow the rule for the first > > >> > several releases, i.e, we are free to remove APIs in the next major > > >> release > > >> > if they are deprecated in x.1.0 and x.2.0 releases. But once we > think > > >> the > > >> > APIs are stable enough, we should follow the rule again, i.e, newly > > >> > deprecated APIs should be retained in the next major release. For > > >> example, > > >> > for 2.x release, I think the stable minor release would be 2.3.0 or > > >> 2.4.0, > > >> > which means if the APIs you used are not deprecated in these minor > > >> release, > > >> > then you can confirm that you can still use it in the next major > > >> release. > > >> > But for minor releases before it, for example, 2.1.x and 2.0.x, > you'd > > >> > better upgrade to 2.3.0 or 2.4.0 first, as the APIs you used may > > >> disappear > > >> > even if they are not deprecated. > > >> > > > >> > And we can add the above words in the upgrading part in our ref > guide. > > >> > > > >> > Thanks. > > >> > > > >> > Zach York <zyork.contribut...@gmail.com> 于2019年4月24日周三 上午3:04写道: > > >> > > > >> > > Always good to see the history of the discussion :) It looks like > > >> nothing > > >> > > really was decided last time (use caution if removing before a > full > > >> major > > >> > > version), hopefully we can come up with something more descriptive > > >> this > > >> > > time. > > >> > > > > >> > > I think the idea of having a tag/annotation for detailing when the > > >> > > method/feature is set for removal is a cool idea that we should > > >> > investigate > > >> > > further. If every deprecated method/feature had such an > annotation, > > it > > >> > > would be easy to build automation around generating release > > >> > > notes/documentation on what was removed in a particular version > > >> (instead > > >> > of > > >> > > relying on someone to manually update the release note/docs). > > >> > > > > >> > > I agree that major releases are taking a long time to release and > > that > > >> > > causes deprecated features to hang around for a long time, but I > > also > > >> > feel > > >> > > like moving it to >= 1 minor release is a bit too quick and would > > add > > >> to > > >> > > upgrade burden. Not everyone uses every minor version so they > might > > be > > >> > > taken unaware by the change or be less likely to upgrade as > quickly. > > >> > > I'm not necessarily against shortening the time. Maybe there is > some > > >> sort > > >> > > of middle ground (>=2 minor releases), but that gets a little > muddy > > >> and > > >> > > would need to be documented heavily. > > >> > > > > >> > > Thanks, > > >> > > Zach > > >> > > > > >> > > On Tue, Apr 23, 2019 at 9:37 AM Lars Francke < > > lars.fran...@gmail.com> > > >> > > wrote: > > >> > > > > >> > > > We had this exact same discussion four years ago (I thought it > was > > >> last > > >> > > > year :O ): < > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > > https://lists.apache.org/thread.html/bbdbf135abe7d8a0a4e7e9563f0bdc3dd6b555a0d3cdc1b1fdd688c2@1427759561@%3Cdev.hbase.apache.org%3E > > >> > > > > > > >> > > > > > >> > > > On Tue, Apr 23, 2019 at 6:32 PM Sean Busbey <bus...@apache.org> > > >> wrote: > > >> > > > > > >> > > > > I have the same interpretation as stack. However, I think the > > >> > > > > expectation back when 1.0.0 was rolling out was that we'd > have a > > >> > > > > regular cadence of major releases to use for removing things > > that > > >> had > > >> > > > > been deprecated. I don't think that cadence has actually > > happened. > > >> > > > > > > >> > > > > For example, here's a set of major releases and how long it > had > > >> been > > >> > > > > since the prior major release at the time it came out: > > >> > > > > > > >> > > > > * 0.94 - 4 months > > >> > > > > * 0.96 - 1.5 years > > >> > > > > * 0.98 - 4 months > > >> > > > > * 1.0 - 1 year > > >> > > > > * 2.0 - 3.25 years > > >> > > > > > > >> > > > > If we started a vote today 3.0 would be at 1 year. I suspect > > it's > > >> > more > > >> > > > > likely to end up landing around the 2 year mark. > > >> > > > > > > >> > > > > Given this rate and the fact that we've made exceptions in the > > >> past > > >> > > > > (e.g. removing things in 2.0 that were deprecated after 1.0 > was > > >> > > > > already out), should we change our behavior or change what we > > >> > document > > >> > > > > to allow removal at a major version without such a long lead > > time? > > >> > > > > > > >> > > > > On Tue, Apr 23, 2019 at 10:17 AM Jan Hentschel > > >> > > > > <jan.hentsc...@ultratendency.com> wrote: > > >> > > > > > > > >> > > > > > Hi everyone, > > >> > > > > > > > >> > > > > > in the PR for HBASE-22262< > > >> https://github.com/apache/hbase/pull/162 > > >> > > > > >> > > we > > >> > > > > noticed that there could be easily a misunderstanding on when > to > > >> > remove > > >> > > > > deprecated methods. In the book< > > >> > > > > http://hbase.apache.org/book.html#hbase.versioning.post10> it > > is > > >> > > > > documented “an API needs to be deprecated for a major version > > >> before > > >> > we > > >> > > > > will change/remove it.”. As the discussion on the PR shows it > > >> leaves > > >> > > some > > >> > > > > room for interpretation and should be made more specific, > > >> including > > >> > > some > > >> > > > > examples. I think we all agree that removing a method in 3.0.0 > > is > > >> ok > > >> > > when > > >> > > > > it was deprecated back in 2.0.0, but what do we do with > methods > > or > > >> > > > classes > > >> > > > > which were deprecated in a minor or patch version? As an > > example, > > >> if > > >> > we > > >> > > > > deprecate a method in 2.3.0, should it be removed in 3.0.0 or > > >> 4.0.0? > > >> > > > > > > > >> > > > > > Best, Jan > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > > > > >