So to attempt to distill a set of heuristics from the discussion: Patch release: Goal: maintain and improve stability - Non-disruptive, non-API changing bugs are fine w/out consensus - Bugs that change defaults or interfaces require consensus - Improvements of any kind require consensus and must be small, in safe areas, non default changing
Minor release: Goal: stable introduction of new features - New features, always with feature flag (added; happy to drop if controversial) - No API breaking changes; additive API changes w/sane defaults acceptable Major release: Goal: provide avenue to make breaking, non-backwards compatible evolutionary changes - API breaking changes - Deprecating functionality - Changing default behaviors - Destructive / removing changes (params, features, etc) - Major, well-tested and well documented component refactors (added; happy to drop if controversial) With the above structure, we may go from Major to patches to Major without a Minor, or go from Minor to patches for awhile to Minors if we don't have destructive changes. Is that consistent w/what you're saying above Mick? If so - what do others think? ~Josh On Thu, Aug 26, 2021 at 3:37 PM Mick Semb Wever <m...@apache.org> wrote: > Throwing my two cents out… > > I'm keen for us to better adhere to SemVer rules (I've said this before). > Specifically defining the difference between a Major and a Minor version, > and defining the difference between a Minor and a Patch version (which in > turn addresses your questions Josh). But this is rather tricky for us > because it is a big and complex codebase and technology, one which focuses > on availability at all times. The easiest way so far for me to think about > this is through the eyes of the user, and the benefits we can give to them. > > Some examples of benefits that come to mind… > > * Major versions can be used to demarcate upgrade paths, e.g. you cannot > jump over a major when upgrading. > * A clearer expectation of when deprecated features and APIs will be > removed, e.g. removal of deprecated features and API can only happen in a > Major version. > * Building on the previous, give the user some structure they can follow > (helping to build intuition) of what might be in NEWS.txt and CHANGES.txt. > * Safety in upgrades if we are stricter about can go into a Patch version. > > Then it is easy to think about the knock-on benefits from this to the dev > community. Clarity about what versions may contain, and what degree of > testing is involved in each upgrade, will encourage users to upgrade more > often, which helps us. Worth noting that this is something we are already > now asking of users, with annual releases only being supported for 3 years. > > Where it does get tricky is, we really cannot define this by jira issue > types. Improvements and Bugs can have API changes, or incur significant > behavioural changes (8099 comes to mind, which was an improvement). > Features can also be clean additions onto existing SPIs, marked as > alpha|beta and applied safely on any past version where that SPI exists. > And Improvements are quite often operational fixes (a quick scan of > CHNAGES.txt for any patch release shows this). This will be easier to > formulate if we better define project components and work off them. Stuff > like tools and client-side stuff, packaging, tests, and SPI > implementations, can be dealt with quite differently. Such a component > list will also help us ensure we get adequate reviews on patches and what > they touch. I've half-baked started this here: > > https://cwiki.apache.org/confluence/display/CASSANDRA/%28draft%29+Project+Roles+and+Responsibilities > ; but am struggling to find time to progress it, any help would be > appreciated. (We have the detailed component list already in jira that we > can re-used here as well.) I do doubt this will be but a helping guide, > where the guidelines are ultimately defined on user-centric criteria. > > In lieu of such guidelines in place, I am in favour of the following for > restricting what can go into a Patch version: > > - Only bugs that are non-disruptive and non-API breaking can go in without > any discussion. > - Other bugs (those that impact existing behaviour/interfaces) require a > consensus. > - Minor improvements, particularly in safe parts of the code, or are in > essence an operational fix, that make sense to include require a consensus. > > > Consensus in all of the above is according to our Code Contributions > voting as described under our Project Governance, and it can be part of the > discussion on the ticket, but also raised to the ML if doubts exist. This > is a very light enforcement of the rules, allowing common sense to prevail, > while letting the encouragement of discussion help organically define our > guidelines over time. > > As to what makes trunk bump up to a Major version (if it hasn't already > during the current release cycle), I'm for starting with some basics like > "this patch breaks upgrades from the previous major" and "this is a > significant underlying change to a subsystem", and again encouraging > discussion as we figure it out. > > Finally, to the topic of "stable trunk" and feature flags. Feature flags > should absolutely be used more, and new features should come out as > disabled by default (as we have been doing more of). There is also some > commonality here with SPI implementations in how they can be accepted into > the code. On the topic of stable trunk: this is a new journey for us and > it was tried (in a way) before with tick-tock without much luck. I do > believe we can get it right this time, but I am scared of applying it to > anything but trunk for the next year until we can validate its success. It > is only to imagine if tick-tock had been applied to all release branches, > help. Stable Trunk will no doubt need some fine-tuning as we go. So, I > would like to leave our release branches alone as much as possible. > Furthermore, my understanding of a stable trunk is that its success will be > validated by how few patch versions we release, and how quiet our release > branches end up being. This will have the benefit that our (very limited) > reviewing capacity can focus more on trunk. And in turn, the more eyes > that focus on trunk the greater success of a stable trunk. > > > > On Thu, 26 Aug 2021 at 19:37, Joshua McKenzie <jmcken...@apache.org> > wrote: > > > The discussion came up on > > https://issues.apache.org/jira/browse/CASSANDRA-16873 concerning where > > we land different diff types and it was clear the conversation should > > come to the ML and the outcome be codified for the future. > > > > Some useful pre-reading on the Release Lifecycle on our wiki: > > https://cwiki.apache.org/confluence/display/CASSANDRA/Release+Lifecycle > > > > For context if it's not clear in the wiki article, the three release > > types we have currently: > > 1. Patch: N.M.x > > 2. Minor: N.x > > 3. Major: N > > > > Currently the wiki articulates the following under General Availability: > > * Incremental fixes for post-GA issues identified will be included in > > patchlevel releases. > > * A new branch is created for the release with the new major version, > > limiting any new feature addition to the new release branch, with new > > feature development will continue to happen only on trunk. > > > > The question that came up discussing C-16873: > > What qualifies as an "Incremental fix" for purposes of inclusion in a > > patch release? > > * Do all bugs qualify? Only some? > > * What if a bugfix breaks an API? Where does that land? > > * Do small improvements that are not API mutating qualify? > > * If improvements, who decides? Lazy consensus w/2 committers? > > > > I'm personally pretty neutral; there's a cost-benefit to this and no > > clear optimal answer to me at face value. > > > > Lastly, I also advocate for a clear definition of expectations on > > these releases in the wiki, something like: > > > > Major: API changes, feature deprecation, protocol changes > > Minor: New features, changes in default behavior > > Patches: Whatever we decide in this thread > > > > What do we think? > > > > ~Josh > > >