Isn't this how it works now? Aka 2.0 is the "I'm risk averse" stable, and 2.1 is the "I'm living on the edge" stable
______________________________ Sent from iPhone > On 17 Jun 2014, at 5:16 pm, Michael Kjellman <mkjell...@internalcircle.com> > wrote: > > Hi Dev@ List— > > TL;DR: > I’d love it if we could modify the C* release cycle to include an additional > “experimental” release branch that straddles the current major releases that > includes somewhat “untested” or “risky” commits that normally would only go > into the next major release. Releases based from this branch wouldn’t contain > any features that require breaking changes or are considered highly > “untested” or “risky” but would include the many other commits that today are > considered too unsafe to put into the previous stable branch. This will allow > us to run code closer to the current stable release branch when we are unable > to move fully to the new major release branch. Also, during the release cycle > of the next major release branch the project can get feedback from a subset > of the total changes that will ultimately make it into that final new major > release. Also — i’m aware that any additional branches/releases will add > additional work for any developer that works on C*. It would be great if we > could strike a balance that hopefully doesn’t add significant additional > merging/rebasing/work for the team... > > The Longer Story: > Last week I had a conversation with a few people regarding a proposed change > to the current C* release schedule. > > Other than an attempt to make Jonathan and Sylvian’s lives more difficult, it > would be ideal if we could better sync our internal release schedule with > more recent Cassandra releases. The current cycle has resulted in currently > “active” branches for 1.2, 2.0, 2.1, and +3.0. Official stable releases are > from 2.0, beta’s/RC’s from 2.1, and there is the potential for another > out-of-band 1.2/previous stable release build. We would love to always run > the current “stable” release in production but generally/historically it > takes time and a few minor releases to the current “major” branch stable to > get to a state where we can accept for use in production. Additionally, as > major releases are currently used to make “breaking” changes that require a > more involved and risky upgrade process, it’s a much bigger deal to deploy a > new major into production than a release without breaking changes. > (upgrade-sstables for example is required when upgrading to a new major > release branch. this unavoidable step adds lots of temporary load to the > cluster and means deploying/upgrading to major releases tends to be a bit > more risky than between minor releases and a more involved/long running > process). This means even though there are months worth of stable hard > work/awesome improvements in the current “stable” major release branch (today > this is 2.0), we end up with an unavoidable and undesired lag in getting more > recent C* changes pushed into production. This means we are unable to provide > feedback on newer changes sooner to the community, stuck and unable to get > even a subset of the awesome changes as we can’t yet take ALL the changes > from the new major release branch, and finally if we find an issue in > production or want to work on new functionality it would be ideal if we can > write it against a release that is closer to the next major release while > also providing us a reasonable way to get the feature deployed internally on > a branch we are running. > > Currently, the project generally tends to include all risky/breaking/more > “feature” oriented tickets only into the next major release + trunk. However, > there is a subset of these changes that are “somewhat” more risky changes but > pose little/less/no risk the commit with introduce a regression outside of > the scope of the patch/component. Additionally, any changes that depend on > other higher risk/breaking commits/changes wouldn’t be candidates for this > proposed release branch. In a perfect world we would love to target a new > “interim” or “experimental” train of releases which is loosely the most > stable current release train but also includes a subset of changes from the > next major train. (While we were discussing we thought about possible > parallels to the concept of a LTS (Long Term Support) release cycle and what > some people have dubbed the “tick-tock” release cycle.) This might look > something like 1.2 branch + all moderately-to-“less”-risky/non-breaking > commits which currently would only end up in a 2.0 or 2.1 release. (Off the > top of my head, immediately bad candidates for this build would be for > changes to components such as gossip, streaming, or any patch that changes > the storage format etc). This would enable the project to provide builds for > more active/risk-adverse users looking for a reasonable way to get more > features and changes into production than with today’s release cycle. > Additionally, this would hopefully facilitate/increase quicker feedback to > the project on a subset of the new major release branch and any bugs found > could be reported against an actual reproducible release instead of some > custom build with a given number of patches from Jira or git SHAs > applied/backported. > > As it will always take both time and n releases to reach a stable minor > release for a new major train; users could deploy this new release to get a > subset of new features and changes with higher risk than would otherwise go > into a minor release of the previous stable release train. If internally we > wanted to add a new feature we could target this release while testing > internally, and hopefully given the smaller delta between this > “interim/experimental” to make it easier to re-base patches into the next > major release train. This would help us avoid what today has unfortunately > become a unavoidable large lag in getting new C* builds into production as > while we attempt to sync our internal releases with a internally/or community > QA’ed/accepted build/release of the current “stable” build/branch (currently > this is 2.0). > > To accomplish this, the commit workflow would unfortunately need change where > an additional process is added to determine “eligibility” or > “appropriateness” of a given commit to additionally also be committed to the > “experimental” build branch (maybe it’s as simple as leaving it up to the > reviewer + author to determine the risk factor and difficulty in merging the > change back into the “experimental” build?). If it is agreed the > commit/change/patch is a good candidate for the “experimental” branch, in > addition to committing the patch to the current major release branch, the > commit would also be merged into the new “experimental” release. If commits > make it into the “experimental” branch frequently, I would expect/hope > merging patches into the “experimental” build would be relatively easy as the > “experimental” branch should also have most of the changes from the major > release branch sans those considered highly risky or breaking. Additionally, > if internally we want to work on a new feature and test internally before > submitting a patch, we could target our code against the “experimental” > branch, allowing us to test our changes in production without forking C* > internally, writing our code against more recent “modern” changes, and then > hopefully getting that work back to the community. > > > Hope this was clear enough and accurately summarizes the conversation a few > of us had! Looking forward to everyone’s feedback and comments. > > best, > kjellman