> > So who and when is going to implement the automation?
I don't believe we have sufficient consensus that this is necessary to start doling out action-items for implementation. On Thu, May 7, 2015 at 10:16 AM, Ariel Weisberg <ariel.weisb...@datastax.com > wrote: > Hi, > > If it were automated I would have no problem with it. That would be less > work for me because the problems detected would occur anyways and have to > be dealt with by me. I just don't want to deal with extra steps and latency > manually. > > So who and when is going to implement the automation? > > Ariel > > On Thu, May 7, 2015 at 11:11 AM, Benedict Elliott Smith < > belliottsm...@datastax.com> wrote: > > > It's odd, because I honestly think this release process will be easier, > > since the stricter we make it the smoother it can become. It requires > well > > formed commits from everyone, and lets the committers asynchronously > > confirm their work, and for it to never be in question *who* needs to fix > > something, nor what the effect of their fixing it will be. It means we > can, > > as Ariel said, perform a bisect and honestly know its result is accurate. > > Small commits don't need to worry about fast-forwarding; in fact, nobody > > does. It can either be automated, or we can fast forward at a time that > > suits us. In which case the process is *the same* as it is currently. > > > > I have no interest in making the commit process harder. > > > > > > On Thu, May 7, 2015 at 3:59 PM, Jake Luciani <jak...@gmail.com> wrote: > > > > > Ok let's focus then on the idea that trunk is releasable. Releasable > > > to me doesn't mean it can't contain a bad merge. > > > > > > It means it doesn't contain some untested and unstable feature. We > > > can always "release from trunk" and we still have a release process. > > > > > > The idea that trunk must contain. a first time it hits the branch, > > > releasable code is way overboard > > > > > > On Thu, May 7, 2015 at 10:50 AM, Benedict Elliott Smith > > > <belliottsm...@datastax.com> wrote: > > > >> > > > >> This breaks your model of applying every commit ref by ref. > > > > > > > > > > > > How? The rebase only affects commits after the "real" branch, so it > > still > > > > cleanly fast forwards? > > > > > > > > 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. > > > > > > > > On Thu, May 7, 2015 at 3:46 PM, Jake Luciani <jak...@gmail.com> > wrote: > > > > > > > >> You then fetch and repair > > > >> your local version and try again. > > > >> > > > >> This breaks your model of applying every commit ref by ref. > > > >> > > > >> I'm all for trying to avoid extra work/stability but we already have > > > >> added a layer of testing every change before commit. I'm not going > to > > > >> accept we need to also add a layer of testing before every merge. > > > >> > > > >> > > > >> > > > >> > > > >> On Thu, May 7, 2015 at 10:36 AM, Benedict Elliott Smith > > > >> <belliottsm...@datastax.com> wrote: > > > >> >> > > > >> >> wouldn't you need to force push? > > > >> > > > > >> > > > > >> > git push --force-with-lease > > > >> > > > > >> > This works essentially like CAS; if the remote repositories are > not > > > the > > > >> > same as the one you have modified, it will fail. You then fetch > and > > > >> repair > > > >> > your local version and try again. > > > >> > > > > >> > So what does this buy us? > > > >> > > > > >> > > > > >> > This buys us a clean development process. We bought into "always > > > >> > releasable". It's already a tall order; if we start weakening the > > > >> > constraints before we even get started, I am unconvinced we will > > > >> > successfully deliver. A monthly release cycle requires *strict* > > > >> processes, > > > >> > not *almost* strict, or strict*ish*. > > > >> > > > > >> > Something that could also help make a more streamlined process: if > > > actual > > > >> > commits were constructed on development branches ready for commit, > > > with a > > > >> > proper commit message and CHANGES.txt updated. Even more ideally: > > with > > > >> git > > > >> > rerere data for merging up to each of the branches. If we had > that, > > > and > > > >> > each of the branches had been tested in CI, we would be much > closer > > > than > > > >> we > > > >> > are currently, as the risk-at-commit is minimized. > > > >> > > > > >> > On Thu, May 7, 2015 at 2:48 PM, Jake Luciani <jak...@gmail.com> > > > wrote: > > > >> > > > > >> >> git rebase -i trunk_staging <ref~1> > > > >> >> fix the problem > > > >> >> git rebase --continue > > > >> >> > > > >> >> In this situation, if there was an untested follow on commit > > wouldn't > > > >> >> you need to force push? > > > >> >> > > > >> >> On Thu, May 7, 2015 at 9:28 AM, Benedict Elliott Smith > > > >> >> <belliottsm...@datastax.com> wrote: > > > >> >> >> > > > >> >> >> If we do it, we'll end up in weird situations which will be > > > annoying > > > >> for > > > >> >> >> everyone > > > >> >> > > > > >> >> > > > > >> >> > Such as? I'm not disputing, but if we're to assess the relative > > > >> >> > strengths/weaknesses, we need to have specifics to discuss. > > > >> >> > > > > >> >> > If we do go with this suggestion, we will most likely want to > > > enable a > > > >> >> > shared git rerere cache, so that rebasing is not painful when > > there > > > >> are > > > >> >> > future commits. > > > >> >> > > > > >> >> > If instead we go with "repairing" commits, we cannot have a > > > "queue" of > > > >> >> > things to merge up to. Say you have a string of commits waiting > > for > > > >> >> > approval C1 to C4; you made C1, and it broke something. You > > > introduce > > > >> C5 > > > >> >> to > > > >> >> > fix it, but the tests are still broken. Did you not really fix > > it? > > > Or > > > >> >> > perhaps one of C2 to C4 are to blame, but which? And have you > > > >> >> accidentally > > > >> >> > broken *them* with your commit? Who knows. Either way, we > > > definitely > > > >> >> cannot > > > >> >> > fast forward. At the very best we can hope that the new merge > did > > > not > > > >> >> > conflict or mess up the other people's C2 to C4 commits, and > they > > > >> have to > > > >> >> > now merge on top. But what if another merge comes in, C6, in > the > > > >> >> meantime; > > > >> >> > and C2 really did also break the tests in some way; how do we > > > >> determine > > > >> >> C2 > > > >> >> > was to blame, and not C6, or C3 or C4? What do the committers > for > > > >> each of > > > >> >> > these do? We end up in a lengthy tussle, and aren't able to > > commit > > > >> any of > > > >> >> > these to the mainline until all of them are resolved. Really we > > > have > > > >> to > > > >> >> > prevent any merges to the staging repository until the mistakes > > are > > > >> >> fixed. > > > >> >> > Since our races in these scenario are the length of time taken > > for > > > >> cassci > > > >> >> > to vet them, these problems are much more likely than current > > race > > > to > > > >> >> > commit. > > > >> >> > > > > >> >> > In the scheme I propose, in this scenario, the person who broke > > the > > > >> build > > > >> >> > rebases everyone's branches to his now fixed commit, and the > next > > > >> broken > > > >> >> > commit gets blamed, and all other commits being merged in on > top > > > can > > > >> go > > > >> >> in > > > >> >> > smoothly. The only pain point I can think of is the > multi-branch > > > >> rebase, > > > >> >> > but this is solved by git rerere. > > > >> >> > > > > >> >> > I agree running tests is painful, but at least for the build, > > this > > > >> should > > > >> >> >> be the responsibility of the committer to build before merging > > > >> >> > > > > >> >> > > > > >> >> > Why make the distinction if we're going to have staging > commits? > > > It's > > > >> a > > > >> >> bit > > > >> >> > of a waste of time to run three ant real-clean && ant tasks, > and > > > >> >> increases > > > >> >> > the race window for merging (which is painful whether or not > > > involves > > > >> a > > > >> >> > rebase), and it is not a *typical* occurrence ("alarming" is > > > >> subjective) > > > >> >> > > > > >> >> > On Thu, May 7, 2015 at 2:12 PM, Sylvain Lebresne < > > > >> sylv...@datastax.com> > > > >> >> > wrote: > > > >> >> > > > > >> >> >> > If one of them breaks, we go and edit the _staging branch in > > > place > > > >> to > > > >> >> >> correct > > > >> >> >> > the problem, and let CI run again. > > > >> >> >> > > > >> >> >> I would strongly advise against *in place* edits. If we do it, > > > we'll > > > >> >> end up > > > >> >> >> in > > > >> >> >> weird situations which will be annoying for everyone. Editing > > > commits > > > >> >> that > > > >> >> >> have > > > >> >> >> been shared is almost always a bad idea and that's especially > > true > > > >> for > > > >> >> >> branch > > > >> >> >> that will have some amount of concurrency like those staging > > > >> branches. > > > >> >> >> > > > >> >> >> Even if such problems are rare, better to avoid them in the > > first > > > >> place > > > >> >> by > > > >> >> >> simply > > > >> >> >> commit new "fixup" commits as we currently do. Granted this > give > > > you > > > >> a > > > >> >> >> slightly > > > >> >> >> less clean history but to the best of my knowledge, this > hasn't > > > been > > > >> a > > > >> >> pain > > > >> >> >> point so far. > > > >> >> >> > > > >> >> >> > 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 > > > >> >> >> > > > >> >> >> If we do this, we should really automate that last part (have > > the > > > CI > > > >> >> >> environment merge the staging branch to the non-staging ones > on > > > >> >> success). > > > >> >> >> > > > >> >> >> > It seems if we want an "always releasable" set of branches, > we > > > need > > > >> >> >> something > > > >> >> >> > along these lines. > > > >> >> >> > > > >> >> >> Agreed as far as having staging branches vetoed by CI goes. > Less > > > sure > > > >> >> about > > > >> >> >> the edit-commit-in-place part as said above. > > > >> >> >> > > > >> >> >> > I certainly break tests by mistake, or the build itself, > with > > > >> alarming > > > >> >> >> regularity. > > > >> >> >> > > > >> >> >> I agree running tests is painful, but at least for the build, > > this > > > >> >> should > > > >> >> >> be > > > >> >> >> the responsibility of the committer to build before merging. > We > > > all > > > >> >> forget > > > >> >> >> it from > > > >> >> >> times to times and that's ok, but it's not ok if it's > > "alarmingly > > > >> >> regular". > > > >> >> >> > > > >> >> >> -- > > > >> >> >> Sylvain > > > >> >> >> > > > >> >> > > > >> >> > > > >> >> > > > >> >> -- > > > >> >> http://twitter.com/tjake > > > >> >> > > > >> > > > >> > > > >> > > > >> -- > > > >> http://twitter.com/tjake > > > >> > > > > > > > > > > > > -- > > > http://twitter.com/tjake > > > > > > -- Joshua McKenzie DataStax -- The Apache Cassandra Company