Agreed. But I think shrinking the release cycle naturally will get features into usable releases more quickly solving b as well. :)
> On Jun 17, 2014, at 10:28 AM, "Jake Luciani" <jak...@gmail.com> wrote: > > So there are two issues this proposal is trying to address: > > 1. Shrink the release cycle. > > 2. Backport things to stable releases. > > We should discuss these separately since together it's hard to discuss. > 1. is less controversial I would think :) > > > > > > > On Tue, Jun 17, 2014 at 1:16 PM, Michael Kjellman < > mkjell...@internalcircle.com> wrote: > >> Totally agree — "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…” >> >> That being said I don’t think i’m alone by identifying the problem. The >> proposed solution was what we came up with in the hour or so we discussed >> this in person. How else can you shrink the release schedule without >> creating another branch? Also — the idea is to only have this branch >> “active” during the overlap when major release branches need to stabilize. >> >>> On Jun 17, 2014, at 10:03 AM, Brandon Williams <dri...@gmail.com> wrote: >>> >>> If that's what we want, merging is going to be much more painful. >>> Currently we merge: >>> >>> 1.2->2.0->2.1->3.0 >>> >>> If we add an experimental branch for each, we still have to merge the >>> stable branch into experiemental: >>> >>> 1-2->1.2ex, 2.0->2.0ex, 2.1->2.1ex, 3.0->3.0ex >>> >>> And then the experimentals into each other: >>> >>> 1.2ex->2.0ex, 2.0ex->2.1ex, 2.1ex->3.0ex >>> >>> That's quite a lot of merging in the end. >>> >>> >>>> On Tue, Jun 17, 2014 at 11:51 AM, Jake Luciani <jak...@gmail.com> wrote: >>>> >>>> I'm not sure many people have the problem you are describing. This is >> more >>>> of a C* developer issue than a C* user issue. >>>> >>>> >>>> Is the below what you are describing we move to?: >>>> >>>> 1.2 -> 2.0 -> 2.1 -> 3.0 stable >>>> 1.2 <- 2.0 <- 2.1 <- 3.0 experimental >>>> >>>> Specific changes would be backported based on the "less riskyness" of >> the >>>> change which you are assuming will be constant across versions? >>>> >>>> -Jake >>>> >>>> >>>> >>>> >>>> On Tue, Jun 17, 2014 at 12:28 PM, Michael Kjellman < >>>> mkjell...@internalcircle.com> wrote: >>>> >>>>> It's a bit about features - but it's more an attempt to achieve the >> goals >>>>> of what might happen with a 4 week release cycle (but that itself -- in >>>>> practice didn't prove to be valid/reasonable). >>>>> >>>>> If something like an executor service for performance is changed (for >>>>> example) it is definitely a more risky change than what would currently >>>> go >>>>> into 1.2 -- but most likely we would want to get patches like that >> into a >>>>> usable build. >>>>> >>>>> So I guess: a) reduce code drift between branches we run in production >> b) >>>>> get newer "features" into production faster where breaking changes >> aren't >>>>> required for the scope of the patch. >>>>> >>>>> Additionally - it's also a question of what release we use when we >>>>> identify an issue we want to work on internally. If we are on 1.2 >> because >>>>> we can't yet take ALL of 2.0 - do we now need to target our work >> against >>>>> 1.2? I would rather write it against the months worth of changes that >>>> have >>>>> happened since. >>>>> >>>>> Finally, it's an attempt to make the internal forking not as common as >> it >>>>> might be today. As you said - this is somewhat of a common process. >>>>> >>>>>> On Jun 17, 2014, at 8:52 AM, "Jake Luciani" <jak...@gmail.com> wrote >>>>>> >>>>>> Hi Michael, >>>>>> >>>>>> I didn't get to hear the in person conversation so taking a step back. >>>>>> The proposal seems to be in response to a common problem. i.e. I'm >> on >>>>> C* >>>>>> version X and I need feature Y which is only available on version Z. >> Is >>>>>> this correct? >>>>>> >>>>>> The options have been: a) upgrade to version Z or b) fork C* and >>>>> backport. >>>>>> Coming my my previous job where I ran a prod C* cluster I felt this >>>> and I >>>>>> expect many others do too. We did have to fork and backport patches >> we >>>>>> needed and it was hard. >>>>>> >>>>>> This is specific to features and not bugs, since bugs are fixed in all >>>>>> versions affected. >>>>>> >>>>>> -Jake >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Jun 17, 2014 at 3:16 AM, 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 >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> http://twitter.com/tjake >>>> >>>> >>>> >>>> -- >>>> http://twitter.com/tjake > > > -- > http://twitter.com/tjake