>
> Merging is *hard*. Especially 2.1 -> 3.0, with many breaking API changes
> (this is before 8099, which is going to make a *world* of hurt, and will
> stick around for a year). It is *very* easy to break things, with even the
> utmost care.


While I agree re:merging, I'm not convinced the proportion of commits that
will benefit from a staging branch testing pipeline is high enough to
justify the time and complexity overhead to (what I expect are) the vast
majority of commits that are smaller, incremental changes that won't
benefit from this.

On Thu, May 7, 2015 at 9:56 AM, Ariel Weisberg <ariel.weisb...@datastax.com>
wrote:

> Hi,
>
> Sorry didn't mean to blame or come off snarky. I just it is important not
> to #include our release process from somewhere else. We don't have to do
> anything unless it is necessary to meet some requirement of what we are
> trying to do.
>
> So the phrase "Trunk is always releasable" definitely has some wiggle room
> because you have to define what your release process is.
>
> If your requirement is that at any time you be able to tag trunk and ship
> it within minutes then yes staging branches help solve that problem.
>
> The reality is that the release process always takes low single digit days
> because you branch trunk, then wait for longer running automated tests to
> run against that branch. If there happens to be a failure you may have to
> update the branch, but you have bounded how much brokeness sits between you
> and release already. We also don't have a requirement to be able to ship
> nigh immediately.
>
> We can balance the cost of extra steps and process against the cost of
> having to delay some releases some of the time by a few days and pick
> whichever is more important. We are stilly reducing the amount of time it
> takes to get a working release. Reduced enough that we should be able to
> ship every month without difficulty. I have been on a team roughly our size
> that shipped every three weeks without having staging branches. Trunk broke
> infrequently enough it wasn't an issue and when it did break it wasn't hard
> to address. The real pain point was flapping tests and the diffusion of
> responsibility that prevented them from getting fixed.
>
> If I were trying to sell staging branches I would work the angle that I
> want to be able to bisect trunk without coming across broken revisions.
> Then balance the value of that with the cost of the process.
>
> Ariel
>
> On Thu, May 7, 2015 at 10:41 AM, Benedict Elliott Smith <
> belliottsm...@datastax.com> wrote:
>
> > It's a bit unfair to characterize Aleksey as subscribing to a cargo cult.
> > *We* agreed to define the new release process as "keeping trunk always
> > releasable".
> >
> > Your own words that catalyzed this: "If we release off trunk it is pretty
> > much necessary for trunk to be in a releasable state all the time"
> >
> > It is possible we have been imprecise in our discussions, and people have
> > agreed to different things. But it does seem to me we agreed to the
> > position Aleksey is taking, and he is not blindly following some other
> > process that is not ours.
> >
> > On Thu, May 7, 2015 at 3:25 PM, Ariel Weisberg <
> > ariel.weisb...@datastax.com>
> > wrote:
> >
> > > Hi,
> > >
> > > Whoah. Our process is our own. We don't have to subscribe to any cargo
> > cult
> > > book buying seminar giving process.
> > >
> > > And whatever we do we can iterate and change until it works for us and
> > > solves the problems we want solved.
> > >
> > > Ariel
> > >
> > > On Thu, May 7, 2015 at 10:13 AM, Aleksey Yeschenko <alek...@apache.org
> >
> > > wrote:
> > >
> > > > Strictly speaking, the train schedule does demand that trunk, and all
> > > > other branches, must be releasable at all times, whether you like it
> or
> > > not
> > > > (for the record - I *don’t* like it, but here we are).
> > > >
> > > > This, and other annoying things, is what be subscribed to tick-tock
> vs.
> > > > supported branches experiment.
> > > >
> > > > > We still need to run CI before we release. So what does this buy
> us?
> > > >
> > > > Ideally (eventually?) we won’t have to run CI, including duration
> > tests,
> > > > before we release, because we’ll never merge anything that hadn’t
> > passed
> > > > the full suit, including duration tests.
> > > >
> > > > That said, perhaps it’s too much change at once. We still have
> missing
> > > > pieces of infrastructure, and TE is busy with what’s already
> > back-logged.
> > > > So let’s revisit this proposal in a few months, closer to 3.1 or 3.2,
> > > maybe?
> > > >
> > > > --
> > > > AY
> > > >
> > > > On May 7, 2015 at 16:56:07, Ariel Weisberg (
> > ariel.weisb...@datastax.com)
> > > > wrote:
> > > >
> > > > Hi,
> > > >
> > > > I don't think this is necessary. If you merge with trunk, test, and
> > > someone
> > > > gets in a head of you just merge up and push to trunk anyways. Most
> of
> > > the
> > > > time the changes the other person made will be unrelated and they
> will
> > > > compose fine. If you actually conflict then yeah you test again but
> > this
> > > > doesn't happen often.
> > > >
> > > > The goal isn't to have trunk passing every single time it's to have
> it
> > > pass
> > > > almost all the time so the test history means something and when it
> > fails
> > > > it fails because it's broken by the latest merge.
> > > >
> > > > At this size I don't see the need for a staging branch to prevent
> trunk
> > > > from ever breaking. There is a size where it would be helpful I just
> > > don't
> > > > think we are there yet.
> > > >
> > > > Ariel
> > > >
> > > > On Thu, May 7, 2015 at 5:05 AM, Benedict Elliott Smith <
> > > > belliottsm...@datastax.com> wrote:
> > > >
> > > > > A good practice as a committer applying a patch is to build and run
> > the
> > > > > unit tests before updating the main repository, but to do this for
> > > every
> > > > > branch is infeasible and impacts local productivity. Alternatively,
> > > > > uploading the result to your development tree and waiting a few
> hours
> > > for
> > > > > CI to validate it is likely to result in a painful cycle of
> > > race-to-merge
> > > > > conflicts, rebasing and waiting again for the tests to run.
> > > > >
> > > > > So I would like to propose a new strategy: staging branches.
> > > > >
> > > > > Every major branch would have a parallel branch:
> > > > >
> > > > > cassandra-2.0 <- cassandra-2.0_staging
> > > > > cassandra-2.1 <- cassandra-2.1_staging
> > > > > trunk <- trunk_staging
> > > > >
> > > > > On commit, the idea would be to perform the normal merge process on
> > the
> > > > > _staging branches only. CI would then run on every single git ref,
> > and
> > > as
> > > > > these passed we would fast forward the main branch to the latest
> > > > validated
> > > > > staging git ref. If one of them breaks, we go and edit the _staging
> > > > branch
> > > > > in place to correct the problem, and let CI run again.
> > > > >
> > > > > So, a commit would look something like:
> > > > >
> > > > > patch -> cassandra-2.0_staging -> cassandra-2.1_staging ->
> > > trunk_staging
> > > > >
> > > > > wait for CI, see 2.0, 2.1 are fine but trunk is failing, so
> > > > >
> > > > > git rebase -i trunk_staging <ref~1>
> > > > > fix the problem
> > > > > git rebase --continue
> > > > >
> > > > > wait for CI; all clear
> > > > >
> > > > > git checkout cassandra-2.0; git merge cassandra-2.0_staging
> > > > > git checkout cassandra-2.1; git merge cassandra-2.1_staging
> > > > > git checkout trunk; git merge trunk_staging
> > > > >
> > > > > This does introduce some extra steps to the merge process, and we
> > will
> > > > have
> > > > > branches we edit the history of, but the amount of edited history
> > will
> > > be
> > > > > limited, and this will remain isolated from the main branches. I'm
> > not
> > > > sure
> > > > > how averse to this people are. An alternative policy might be to
> > > enforce
> > > > > that we merge locally and push to our development branches then
> await
> > > CI
> > > > > approval before merging. We might only require this to be repeated
> if
> > > > there
> > > > > was a new merge conflict on final commit that could not
> automatically
> > > be
> > > > > resolved (although auto-merge can break stuff too).
> > > > >
> > > > > Thoughts? It seems if we want an "always releasable" set of
> branches,
> > > we
> > > > > need something along these lines. I certainly break tests by
> mistake,
> > > or
> > > > > the build itself, with alarming regularity. Fixing with merges
> > leaves a
> > > > > confusing git history, and leaves the build broken for everyone
> else
> > in
> > > > the
> > > > > meantime, so patches applied after, and development branches based
> on
> > > > top,
> > > > > aren't sure if they broke anything themselves.
> > > > >
> > > >
> > >
> >
>



-- 
Joshua McKenzie
DataStax -- The Apache Cassandra Company

Reply via email to