I agree — but there are lots of people though who lag in adoption while waiting 
for more “risky” or “breaking” changes to shake out/stabilize that want to 
continue deploying newer fixes. No?

> On Jun 17, 2014, at 9: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

Reply via email to