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

Reply via email to