<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Build-always vs Build-on-checkin</title>
	<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/</link>
	<description>...my CyberSoapBox!</description>
	<pubDate>Sat, 11 Oct 2008 00:06:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>

	<item>
		<title>by: John O&#8217;Duinn&#8217;s Soapbox &#187; Build-always vs Build-on-checkin (continued)</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-355</link>
		<pubDate>Fri, 18 Jan 2008 03:54:39 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-355</guid>
					<description>[...] My initial blog on this topic attracted a bunch of comments, and some great blogs on this, especially RobHelmer&#8217;s blog and Rob Campbell&#8217;s blog. [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] My initial blog on this topic attracted a bunch of comments, and some great blogs on this, especially RobHelmer&#8217;s blog and Rob Campbell&#8217;s blog. [&#8230;]
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: ~robcee/ &#187; Tinderbox Remixed (qa vs. build mashup)</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-335</link>
		<pubDate>Mon, 14 Jan 2008 20:13:06 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-335</guid>
					<description>[...] There&#8217;s been some talk around the water cooler recently about some improvements to the build farm. I think this is great and will go a long way towards making the build systems easier to work on with a minimum of localized soreness. [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] There&#8217;s been some talk around the water cooler recently about some improvements to the build farm. I think this is great and will go a long way towards making the build systems easier to work on with a minimum of localized soreness. [&#8230;]
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: rhelmer&#8217;s blog &#187; Blog Archive &#187; summarizing build-on-checkin feedback</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-312</link>
		<pubDate>Thu, 10 Jan 2008 06:08:56 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-312</guid>
					<description>[...] Lots of feedback on the build-on-checkin idea in my blog, the newsgroup, and especially joduinn&#8217;s recent post on the subject. The primary concerns seem to be: [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] Lots of feedback on the build-on-checkin idea in my blog, the newsgroup, and especially joduinn&#8217;s recent post on the subject. The primary concerns seem to be: [&#8230;]
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Ben Hearsm</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-305</link>
		<pubDate>Tue, 08 Jan 2008 19:18:37 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-305</guid>
					<description>@bsmedberg:
&lt;i&gt;10:20am: after builds ‘A’ finish, would they start on a tree with checkin ‘B’ or skip directly to ‘C’?&lt;/i&gt;

It can be setup in one of two ways:
1) the next Build would build B+C
or
2) the next Build would build B, and the build after that would build C.

--

@everyone:
'build-on-checkin' in Buildbot supports a 'treeStableTimer', which is the amount of silent (ie. no-checkins) required before building. This could be set to 5min, 1h, etc. So _if_ we end up going to a build-on-checkin' system in the future the problem some of describe can be made less of one.</description>
		<content:encoded><![CDATA[<p>@bsmedberg:<br />
<i>10:20am: after builds ‘A’ finish, would they start on a tree with checkin ‘B’ or skip directly to ‘C’?</i></p>
<p>It can be setup in one of two ways:<br />
1) the next Build would build B+C<br />
or<br />
2) the next Build would build B, and the build after that would build C.</p>
<p>&#8211;</p>
<p>@everyone:<br />
&#8216;build-on-checkin&#8217; in Buildbot supports a &#8216;treeStableTimer&#8217;, which is the amount of silent (ie. no-checkins) required before building. This could be set to 5min, 1h, etc. So _if_ we end up going to a build-on-checkin&#8217; system in the future the problem some of describe can be made less of one.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Benjamin Smedberg</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-294</link>
		<pubDate>Sat, 05 Jan 2008 15:18:45 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-294</guid>
					<description>John, I have mixed feelings about this: the current system of only kicking of unit-test builds on checkin has been problematic if the machines misbehave at all: the first build is red, and it doesn't automatically cycle. Also, because CVS commits are not atomic, I'm worried about builds kicking off before the checkin is complete: sometimes a large CVS checkin can take several minutes.

As for the question about stacked checkins, are you envisioning a system where each stacked commit would be built, or that if the build machines were running behind several commits would be batched? e.g.

10am: commit A
10:01am: builds A kick off
10:02am: commit B
10:03am: commit C
10:20am: after builds 'A' finish, would they start on a tree with checkin 'B' or skip directly to 'C'?

And, just to be sure, you're not talking about doing this with the perftest machines, are you, just the build machines? I think it is valuable to reduce noise to get as many perftest runs as possible, even if there have been no checkins.</description>
		<content:encoded><![CDATA[<p>John, I have mixed feelings about this: the current system of only kicking of unit-test builds on checkin has been problematic if the machines misbehave at all: the first build is red, and it doesn&#8217;t automatically cycle. Also, because CVS commits are not atomic, I&#8217;m worried about builds kicking off before the checkin is complete: sometimes a large CVS checkin can take several minutes.</p>
<p>As for the question about stacked checkins, are you envisioning a system where each stacked commit would be built, or that if the build machines were running behind several commits would be batched? e.g.</p>
<p>10am: commit A<br />
10:01am: builds A kick off<br />
10:02am: commit B<br />
10:03am: commit C<br />
10:20am: after builds &#8216;A&#8217; finish, would they start on a tree with checkin &#8216;B&#8217; or skip directly to &#8216;C&#8217;?</p>
<p>And, just to be sure, you&#8217;re not talking about doing this with the perftest machines, are you, just the build machines? I think it is valuable to reduce noise to get as many perftest runs as possible, even if there have been no checkins.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Gary Kwong</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-293</link>
		<pubDate>Sat, 05 Jan 2008 12:00:14 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-293</guid>
					<description>I have a suggestion: a delayed build-on-checkin.

For example, if nothing gets checked in, no builds are done. However, once there is a check-in, the build machine "waits" for a period of time (e.g. 1 hour), for all checkins that occur within that timeframe (1 hr) to get in before doing up a build. This way, a dev with 3 or 4 checkins have that time to check in all that he wants, including other devs who want to do so at the same time as well.

Parallel machines could also work this way.

Just an idea...</description>
		<content:encoded><![CDATA[<p>I have a suggestion: a delayed build-on-checkin.</p>
<p>For example, if nothing gets checked in, no builds are done. However, once there is a check-in, the build machine &#8220;waits&#8221; for a period of time (e.g. 1 hour), for all checkins that occur within that timeframe (1 hr) to get in before doing up a build. This way, a dev with 3 or 4 checkins have that time to check in all that he wants, including other devs who want to do so at the same time as well.</p>
<p>Parallel machines could also work this way.</p>
<p>Just an idea&#8230;
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Gijs</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-292</link>
		<pubDate>Sat, 05 Jan 2008 10:28:58 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-292</guid>
					<description>There is also the practical problem with build-on-checkin that if a build busts without the patch having anything to do with it (impossible in theory, happens fairly often in practice) then it's going to sit there being busted until someone kicks it. I've seen this happening a *lot* on the testing boxes which already do build-on-checkin. It's really annoying - in the "normal" continuous system, they continue building and often the next build will be fine. In this new system, we would need to kick it by some not-so-interesting patch or whatever to see if it's really spurious, and in the meantime nobody can checkin cause the tree is red/orange.</description>
		<content:encoded><![CDATA[<p>There is also the practical problem with build-on-checkin that if a build busts without the patch having anything to do with it (impossible in theory, happens fairly often in practice) then it&#8217;s going to sit there being busted until someone kicks it. I&#8217;ve seen this happening a *lot* on the testing boxes which already do build-on-checkin. It&#8217;s really annoying - in the &#8220;normal&#8221; continuous system, they continue building and often the next build will be fine. In this new system, we would need to kick it by some not-so-interesting patch or whatever to see if it&#8217;s really spurious, and in the meantime nobody can checkin cause the tree is red/orange.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Andrew Schultz</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-291</link>
		<pubDate>Sat, 05 Jan 2008 07:59:15 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-291</guid>
					<description>I accept that build-on-checkin helps if someone commits something after a long idle period (especially in the 1-tbox case you've used as an example), but it seems like there are also many scenarios where developers lose.  The most dramatic case is that someone commits a patch right after someone else.  The first checkin kicks off all the clients and the second committer then has to wait nearly two full cycles to get a completed build.  Even worse, both committers might be the same person (which is often the case), in which case the developer always get screwed (by design).

Beyond that, the chaos of continuous builds (all the tinderboxen asynchronous) has a big advantage: whenever you commit a patch, it's likely that one client will pick up your checkin quickly.  This means everyone gets reasonably fast feedback on build bustages (so long as it's cross-platform).  With build-on-checkin, the first committer gets quick feedback (on all platforms) and everyone else gets slow feedback (on all platforms).  On a relative basis, I'd expect that the initial feedback time hit to be much more significant (300% perhaps) with build-on-checkin while the time to finish builds would be marginally better or worse (the first-committer only sees a 50% decrease in build-time on average).

The chaos of continuous builds also results in builds from different boxes building with different sets of patches (one might have A and then B+C and then D, while another might have A+B and then C+D).  This is often helpful when diagnosing test failures.  Build-on-checkin would decrease the heterogeneity (it would bias all the boxes to have A+B and C+D).

I'd expect parallel builds from a buildbot pool would resolve these problems so long as the pool is sufficiently large, but without that, I don't see much advantage to build-on-checkin (a few people benefit, the rest are worse off).  I'm also not quite sure how they would distinguish checkins (since CVS has no atomic commits).

What would be helpful is to measure the distribution of time-to-initial-feedback and time-to-finished-builds for both modes, either using historical data from tinderbox and buildbot clients, or perhaps simulating each mode with historical checkin data and hypothetical build times.

Finally, (depending on how jumpy they are) build-on-checkin might result in more mid-checkin bustages, since the client would (by design) be trying to jump in right after someone commits something.</description>
		<content:encoded><![CDATA[<p>I accept that build-on-checkin helps if someone commits something after a long idle period (especially in the 1-tbox case you&#8217;ve used as an example), but it seems like there are also many scenarios where developers lose.  The most dramatic case is that someone commits a patch right after someone else.  The first checkin kicks off all the clients and the second committer then has to wait nearly two full cycles to get a completed build.  Even worse, both committers might be the same person (which is often the case), in which case the developer always get screwed (by design).</p>
<p>Beyond that, the chaos of continuous builds (all the tinderboxen asynchronous) has a big advantage: whenever you commit a patch, it&#8217;s likely that one client will pick up your checkin quickly.  This means everyone gets reasonably fast feedback on build bustages (so long as it&#8217;s cross-platform).  With build-on-checkin, the first committer gets quick feedback (on all platforms) and everyone else gets slow feedback (on all platforms).  On a relative basis, I&#8217;d expect that the initial feedback time hit to be much more significant (300% perhaps) with build-on-checkin while the time to finish builds would be marginally better or worse (the first-committer only sees a 50% decrease in build-time on average).</p>
<p>The chaos of continuous builds also results in builds from different boxes building with different sets of patches (one might have A and then B+C and then D, while another might have A+B and then C+D).  This is often helpful when diagnosing test failures.  Build-on-checkin would decrease the heterogeneity (it would bias all the boxes to have A+B and C+D).</p>
<p>I&#8217;d expect parallel builds from a buildbot pool would resolve these problems so long as the pool is sufficiently large, but without that, I don&#8217;t see much advantage to build-on-checkin (a few people benefit, the rest are worse off).  I&#8217;m also not quite sure how they would distinguish checkins (since CVS has no atomic commits).</p>
<p>What would be helpful is to measure the distribution of time-to-initial-feedback and time-to-finished-builds for both modes, either using historical data from tinderbox and buildbot clients, or perhaps simulating each mode with historical checkin data and hypothetical build times.</p>
<p>Finally, (depending on how jumpy they are) build-on-checkin might result in more mid-checkin bustages, since the client would (by design) be trying to jump in right after someone commits something.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Phil Ringnalda</title>
		<link>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-290</link>
		<pubDate>Sat, 05 Jan 2008 06:46:29 +0000</pubDate>
		<guid>http://oduinn.com/2008/01/04/build-always-vs-build-on-checkin/#comment-290</guid>
					<description>While I realize I'm an edge case any more, having a day job and only getting to check in at night, I have the feeling that this would be significantly worse for me in the common case where I have two patches to check in. Unless there's actually a fair bit of lag between a checkin and the start of the triggered builds, if I check in to the quiet nighttime tree and trigger a build, then check in my second patch, I'm certain to have to wait two cycles to get clear for my two patches. In the current system, depending on how my luck is running, I can make a couple of checkins a few minutes apart, wait some fraction of a cycle until they get picked up, then a single cycle to get clear. I'd be going from an absolute worst case of two cycles, if my first patch went in seconds before the start of the slowest OS's build start, but a common case of around 1.5 cycles and a lucky case of barely over one, to a complete certainty of two.</description>
		<content:encoded><![CDATA[<p>While I realize I&#8217;m an edge case any more, having a day job and only getting to check in at night, I have the feeling that this would be significantly worse for me in the common case where I have two patches to check in. Unless there&#8217;s actually a fair bit of lag between a checkin and the start of the triggered builds, if I check in to the quiet nighttime tree and trigger a build, then check in my second patch, I&#8217;m certain to have to wait two cycles to get clear for my two patches. In the current system, depending on how my luck is running, I can make a couple of checkins a few minutes apart, wait some fraction of a cycle until they get picked up, then a single cycle to get clear. I&#8217;d be going from an absolute worst case of two cycles, if my first patch went in seconds before the start of the slowest OS&#8217;s build start, but a common case of around 1.5 cycles and a lucky case of barely over one, to a complete certainty of two.
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
