Re: Proposed changes to C* Release Schedule

2014-06-24 Thread Chris Burroughs

On 06/17/2014 01:16 PM, Michael Kjellman wrote:

That being said I don’t think i’m alone by identifying the problem.


FWIW I'm not doing anything wildly unusual and I've been on a fork for 
as long as I've been on 1.2 (and various times before).  Almost everyone 
being on 1.2 with 3 other equally weighted active branches seems like an 
obvious not-great situation for running cassandra or developing.


I like the idea of shortening the release cycle and LTS style releases 
and they feel like the most direct approach.  I'm a little wary of more 
branches since that could backfire and make the problem worse.


Re: Proposed changes to C* Release Schedule

2014-06-24 Thread Sylvain Lebresne
On Tue, Jun 24, 2014 at 5:26 PM, Jonathan Ellis jbel...@gmail.com wrote:


 What if we tried a quicker release cycle, BUT we would guarantee that
 you could do a rolling upgrade until we bump the supermajor version?
 So 2.0 could upgrade to 3.0 without having to go through 2.1.  (But to
 go to 3.1 or 4.0 you would have to go through 3.0.)


I was thinking of something along those lines so I'm in favor of giving
that a try.

More precisely, I was thinking we could lower the release cycle to 4 month
(less
feels hard to achieve) but make a supermajor only every 2 releases (or
less
often, though guarantee that you could do a rolling upgrade imply that we
rigorously
test that and I think aiming for 2 release in a row initially is a good
start).

It's worth acknowledging that this will probably involve a tad more merging
work
but it feels that increase might be reasonable.

--
Sylvain


 On Tue, Jun 24, 2014 at 8:27 AM, Chris Burroughs
 chris.burrou...@gmail.com wrote:
  On 06/17/2014 01:16 PM, Michael Kjellman wrote:
 
  That being said I don’t think i’m alone by identifying the problem.
 
 
  FWIW I'm not doing anything wildly unusual and I've been on a fork for as
  long as I've been on 1.2 (and various times before).  Almost everyone
 being
  on 1.2 with 3 other equally weighted active branches seems like an
 obvious
  not-great situation for running cassandra or developing.
 
  I like the idea of shortening the release cycle and LTS style releases
 and
  they feel like the most direct approach.  I'm a little wary of more
 branches
  since that could backfire and make the problem worse.



 --
 Jonathan Ellis
 Project Chair, Apache Cassandra
 co-founder, http://www.datastax.com
 @spyced



Re: Proposed changes to C* Release Schedule

2014-06-24 Thread Michael Kjellman
Humm — sorry guys — I never got Chris or Jonathan’s responses for some reason.

That being said, sounds like a good compromise Sylvain. Fingers crossed this 
turns into a good experiment! Thanks

best,
kjellman


 On Jun 24, 2014, at 10:09 AM, Sylvain Lebresne sylv...@datastax.com wrote:
 
 On Tue, Jun 24, 2014 at 5:26 PM, Jonathan Ellis jbel...@gmail.com wrote:
 
 
 What if we tried a quicker release cycle, BUT we would guarantee that
 you could do a rolling upgrade until we bump the supermajor version?
 So 2.0 could upgrade to 3.0 without having to go through 2.1.  (But to
 go to 3.1 or 4.0 you would have to go through 3.0.)
 
 
 I was thinking of something along those lines so I'm in favor of giving
 that a try.
 
 More precisely, I was thinking we could lower the release cycle to 4 month
 (less
 feels hard to achieve) but make a supermajor only every 2 releases (or
 less
 often, though guarantee that you could do a rolling upgrade imply that we
 rigorously
 test that and I think aiming for 2 release in a row initially is a good
 start).
 
 It's worth acknowledging that this will probably involve a tad more merging
 work
 but it feels that increase might be reasonable.
 
 --
 Sylvain
 
 
 On Tue, Jun 24, 2014 at 8:27 AM, Chris Burroughs
 chris.burrou...@gmail.com wrote:
 On 06/17/2014 01:16 PM, Michael Kjellman wrote:
 
 That being said I don’t think i’m alone by identifying the problem.
 
 
 FWIW I'm not doing anything wildly unusual and I've been on a fork for as
 long as I've been on 1.2 (and various times before).  Almost everyone
 being
 on 1.2 with 3 other equally weighted active branches seems like an
 obvious
 not-great situation for running cassandra or developing.
 
 I like the idea of shortening the release cycle and LTS style releases
 and
 they feel like the most direct approach.  I'm a little wary of more
 branches
 since that could backfire and make the problem worse.
 
 
 
 --
 Jonathan Ellis
 Project Chair, Apache Cassandra
 co-founder, http://www.datastax.com
 @spyced
 



Re: Proposed changes to C* Release Schedule

2014-06-18 Thread Marcus Eriksson
I totally understand where you are coming from, I've been in the same
situation before, but;

In my experience the only time you want new features in your database is
during development, once the application you built is in production and
stable you really _never_ want to upgrade the db until there is something
major solved (like repair in 2.1 or streaming in 2.0).

Then, even if we did backport features to these experimental branches, you
are extremely likely to fall far behind in those as well, making it equally
painful to qa/upgrade.

I think I would have appreciated having an LTS-like-version back when I was
running clusters where I could basically automate rolling minor versions
without having to worry about something breaking and then once every 6
months/year bite the bullet and do the QA needed for a major upgrade.

So maybe it would be worth it having branches/releases something like:
3.0: bug fixes
3.1: bug fixes from 3.0 + small new non-breaking features
trunk (future 4.0): everything from 3.1 + new breaking features

Of course, as others have noted, this degenerates into merging hell once
4.0 is released

/Marcus




On Tue, Jun 17, 2014 at 7:32 PM, Michael Kjellman 
mkjell...@internalcircle.com wrote:

 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 

Proposed changes to C* Release Schedule

2014-06-17 Thread Michael Kjellman
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.


Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Jacob Rhoden
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 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Michael Kjellman
No, it generally takes months to reach a minor revision of the current major 
release to reach a release stable enough for most to use in production even if 
they “live on the edge. Generally there ends up being a very low number of 
users who've actively deployed released versions 2.0.0-2.0.5 as they too need 
to evaluate the build and test it in their QA/Staging environments. There are 
plenty of changes that went into 2.0 that are less risky that are good changes 
for the “I’m living on the edge” crowd sans the breaking changes and larger 
risky factors. (I thought i had made this clear — so I apologize I apparently 
didn’t). Additionally, the longer we have to deploy releases from a particular 
branch (while a new “stable branches matures), the farther that branch 
deviates from trunk. This makes it very hard for us to target development 
against, especially as we do everything in our power to avoid any sort of 
branching or running of a special or non-released build.

best,
michael


 On Jun 17, 2014, at 12:42 AM, Jacob Rhoden jacob.rho...@me.com wrote:
 
 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. 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Jake Luciani
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 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Michael Kjellman
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 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Jake Luciani
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
  

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Brandon Williams
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 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Michael Kjellman
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 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Michael Kjellman
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 

Re: Proposed changes to C* Release Schedule

2014-06-17 Thread Michael Kjellman
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