<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>the back burner</title>
	<atom:link href="http://jang.blogs.ilrt.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://jang.blogs.ilrt.org</link>
	<description></description>
	<pubDate>Fri, 15 Aug 2008 09:22:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Using oracle_calendar from within Zope.</title>
		<link>http://jang.blogs.ilrt.org/2008/08/15/using-oracle_calendar-from-within-zope/</link>
		<comments>http://jang.blogs.ilrt.org/2008/08/15/using-oracle_calendar-from-within-zope/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 09:21:14 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[security]]></category>

		<category><![CDATA[zope]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/?p=42</guid>
		<description><![CDATA[Zope (2) wraps a proxy around objects retured frmo an External Method (or behaves in a similar way) that protects member access from other python scripts.
This is exactly not what I&#8217;m after. Apparently this is fixable by adding
__allow_access_to_unprotected_subobjects__ = 1
to the class definition. It&#8217;s irritating to have to modify external methods in order to make [...]]]></description>
			<content:encoded><![CDATA[<p>Zope (2) wraps a proxy around objects retured frmo an External Method (or behaves in a similar way) that protects member access from other python scripts.</p>
<p>This is exactly not what I&#8217;m after. Apparently this is fixable by adding</p>
<p><code>__allow_access_to_unprotected_subobjects__ = 1</code></p>
<p>to the class definition. It&#8217;s irritating to have to modify external methods in order to make them Zope-ready; at least the fix is (apparently) a one-liner.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/08/15/using-oracle_calendar-from-within-zope/feed/</wfw:commentRss>
		</item>
		<item>
		<title>oracle_calendar in python.</title>
		<link>http://jang.blogs.ilrt.org/2008/08/13/oracle_calendar-in-python/</link>
		<comments>http://jang.blogs.ilrt.org/2008/08/13/oracle_calendar-in-python/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 15:35:39 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[oracle calendar]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/?p=41</guid>
		<description><![CDATA[There are several blog posts out there decrying the woeful state of SOAP in the Python world. I shall not echo these in detail; suffice to say, they&#8217;re absolutely right.
Mind you, there is also a bunch of lack in the Oracle calendar SOAP interface: no WSDL, no querying of delegate calendars, a limited SOAP implementation [...]]]></description>
			<content:encoded><![CDATA[<p>There are several blog posts out there decrying the woeful state of SOAP in the Python world. I shall not echo these in detail; suffice to say, they&#8217;re absolutely right.</p>
<p>Mind you, there is also a bunch of lack in the Oracle calendar SOAP interface: no WSDL, no querying of delegate calendars, a limited SOAP implementation that appears to have been written in terms of SAX events and that&#8217;s particularly sensitive to namespace declarations, and so on.</p>
<p>Anyway: I got enough of this working that I can query a user&#8217;s calendar in a fairly Pythonic fashion - <a href="https://svn.cse.bris.ac.uk/svn/jan/trunk/calendar/">https://svn.cse.bris.ac.uk/svn/jan/trunk/calendar/</a> for details. It&#8217;ll suffice to reimplement the guts of Shirley, the ILRT&#8217;s automatic receptionist.</p>
<p>This also marked the first time I&#8217;ve tried using new-style classes to augment the Python <em>str</em> class with a secondary attribute.</p>
<p>Having tested this tonight, we can indeed pull out a list of <em>ilrt-visitor</em> meetings, together with their organiser&#8217;s details (<em>mailto</em> and <em>cn</em>).</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/08/13/oracle_calendar-in-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On the production status of the Departmental Filestore</title>
		<link>http://jang.blogs.ilrt.org/2008/06/10/on-the-production-status-of-the-departmental-filestore/</link>
		<comments>http://jang.blogs.ilrt.org/2008/06/10/on-the-production-status-of-the-departmental-filestore/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 19:14:09 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[production]]></category>

		<category><![CDATA[project management]]></category>

		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/06/10/on-the-production-status-of-the-departmental-filestore/</guid>
		<description><![CDATA[The Google TechTalk on the subject of Scrum, given by Ken Schwaber, contains one of my favourite quotes. You can see the whole thing here; and if you haven&#8217;t, it&#8217;s worthwhile devoting an hour to watching it. Can&#8217;t be bothered? Then don&#8217;t bother reading on. And the quote? To paraphrase,
our discipline has a tried and [...]]]></description>
			<content:encoded><![CDATA[<p>The Google TechTalk on the subject of Scrum, given by Ken Schwaber, contains one of my favourite quotes. You can see <a href="http://http://video.google.com/videoplay?docid=-7230144396191025011">the whole thing here</a>; and if you haven&#8217;t, it&#8217;s worthwhile devoting an hour to watching it. Can&#8217;t be bothered? Then don&#8217;t bother reading on. And the quote? To paraphrase,</p>
<blockquote><p>our discipline has a tried and tested way of going faster. Cut corners, cut quality. That way you can produce more crap.
</p></blockquote>
<p>So, how does this relate to the DFS?<br />
<span id="more-40"></span><br />
Well, I&#8217;m coming under pressure to declare that the DFS is production-ready. This isn&#8217;t a technical thing, this is purely one of PR. Where does this pressure come from? From &#8220;on high&#8221; - ie, from someone who is one hop away from seeing anything other than that we have a working cluster, what&#8217;s holding things up? (Bob&#8217;s actually pretty reasonable about this - he&#8217;s stuck between a rock and an opinionated git.)</p>
<p>There have been unavoidable supplier and technical delays involved in getting this far. The trouble is that dates have been randomly selected on no basis whatsoever (actually, on the basis of having a meeting and me saying, &#8220;it will take <em>n</em> days of uninterrupted work by all involved with nothing else getting in the way, assuming no impediments, no unforseen hitches, and the continued availability of the emotional energy required to sustain that velocity by all involved&#8221; - and then <em>n</em> being added to the date of that meeting); and then those dates have been missed because, for example, we require additional FC ports in order to plug in our development array and the vendor arbitrarily cancelled our order and didn&#8217;t tell us about it. That kind of thing. I work hard on it, at a rate that I consider to be sustainable - I&#8217;ve already managed to get to the point where I looked like a corpse and couldn&#8217;t focus my eyes whilst fixing the mess that the previous kit had put us in. It&#8217;s about expectation management. So stuff slips.</p>
<p>So, I&#8217;ve repeatedly resisted that pressure. Why?</p>
<p>First, I should point out that there is no difference in what we do <em>now</em> compared to what we would do with a system that <em>is</em> production - <em>providing nothing goes wrong</em>. The difference happens when something <em>does</em> go wrong.</p>
<p>What would happen now is that we would run ourselves ragged making stuff up on the fly, recovering the system as quickly as possible, but basically choosing our path on the basis of our best expectation (which would be reasonable except that empirically, we&#8217;ve come to understand that Windows clustering seldom meets our best expectations).</p>
<p>In a production system, we would have already simulated that problem, developed and practised the recovery process, and have it documented and understood by at least two people.</p>
<p>That&#8217;s the difference.</p>
<p>Now, in a recent meeting, I was challenged with this:</p>
<blockquote><p>If we had held any of our current production systems up to the same standards of delivery, they wouldn&#8217;t be in production.</p></blockquote>
<p>That may be true, but it isn&#8217;t a reason to cut corners and produce crap. It&#8217;s a comment on the other services that leak into production, not the state of the DFS.</p>
<p>Why is this the case?</p>
<ul>
<li><strong>A lack of project management.</strong> We lack well-defined milestones. We&#8217;re not in the habit of setting them. Instead, our teams tend to operate in silos, interrupt-driven, incrementally doing development work when the stoking of production systems isn&#8217;t in the way. We don&#8217;t run clean iterations with clean, measurable, achievable milestones.</li>
<li><strong>A lack of project teams.</strong> We&#8217;re not geared up to fix the first problem because of the way that our department is organised. People live under fixed organisational structures. It means that sorting out the logistics (find a DBA; find a sysadmin; find some kit; find a project manager; etc) is difficult because you are naturally trying to squeeze attention out of a small number of vital people who don&#8217;t directly live in the same organisational branch that you do.</li>
<li><strong>A lack of capability to fix the above.</strong> The kind of short-term, well-defined, project-related work needs effort from middle-management. It needs a willingness to devote people to well-identified pieces of work for a fixed period, to let them get on. It needs up-front planning and project-management skills. It needs a bit of vision and a bit of courage.</li>
</ul>
<p>So that&#8217;s where we are and what I think is wrong. We&#8217;re departmentally in a rut. It&#8217;s the role of the departmental directors to sort this out. I&#8217;m not sure it&#8217;s perceived as a problem; but it&#8217;s certainly the case that we could use people better, in more varied ways, and identify the key resource shortages if we were to stop spreading those key people so thinly. We should be giving everyone a more varied, more rewarding experience at work.</p>
<p>And if, when it comes to resourcing a project milestone, 60 people are left in the room because the key people have already been earmarked for working on a particular thing that month: well, then that&#8217;s a result, not a failure. Better to identify that problem than to settle for a working practice that permits you to ignore it.</p>
<p>The good news is that entropy is letting me fill in addition sections in my list of &#8220;what to do when part X craps out&#8221; anyway: we had a fairly hard switch failure the last week and that went swimmingly well; although obviously the nodes that lost paths to the array behind it needed a reboot to find them again afterwards.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/06/10/on-the-production-status-of-the-departmental-filestore/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ZFS snapshotting and mirroring</title>
		<link>http://jang.blogs.ilrt.org/2008/06/02/zfs-snapshotting-and-mirroring/</link>
		<comments>http://jang.blogs.ilrt.org/2008/06/02/zfs-snapshotting-and-mirroring/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 14:37:26 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[solaris]]></category>

		<category><![CDATA[zfs]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/06/02/zfs-snapshotting-and-mirroring/</guid>
		<description><![CDATA[Although ZFS seamlessly will support synchronous mirrors over multiple backend storage arrays, there are some advantages in keeping the mirror process asynchronous.

This is a pretty trivial process to script up. Here are the basics:
To set up the initial mirror of the source/root ZFS to the dest/root ZFS:
# zfs snapshot -r source/root@0001
# zfs send source/root@0001 &#124;
 [...]]]></description>
			<content:encoded><![CDATA[<p>Although ZFS seamlessly will support synchronous mirrors over multiple backend storage arrays, there are some advantages in keeping the mirror process asynchronous.<br />
<span id="more-39"></span><br />
This is a pretty trivial process to script up. Here are the basics:</p>
<p>To set up the initial mirror of the source/root ZFS to the dest/root ZFS:</p>
<p><code># zfs snapshot -r source/root@0001<br />
# zfs send source/root@0001 |<br />
    zfs receive -d dest</code></p>
<p>This&#8217;ll create a <code>dest/root</code> and a <code>dest/root@0001</code> snapshot.</p>
<p>To update the mirror:</p>
<p><code># zfs snapshot -r source/root@0002<br />
# zfs send -i 0001 source/root@0002 |<br />
    zfs receive -Fd dest</code></p>
<p>This sends an incremental set of changes and applies them to the <code>dest/root</code> snapshot. The <code>-F</code> first rolls back <code>dest/root</code> to the latest snapshot - resetting any local changes (including atimes). The result of this is <code>dest/root</code> with two snapshots - the latest, 0002, and the first, 0001.</p>
<p>We can remove the earlier snapshots once the mirror is complete:</p>
<p><code># zfs destroy -r dest/root@0001<br />
# zfs destroy -r source/root@0001</code></p>
<p>This leaves just the latest mirror snapshot available at both ends, permitting the next incremental to run using the same pattern.</p>
<p>Note: there is no recursive option for <code>zfs send</code>; where there are multiple dependent filesystems under <code>source/root</code>, we need to send them one after the other. Assuming the initial filesystem transfer has been done, that looks like this:</p>
<p><code># zfs snapshot -r source/root@0003<br />
# zfs send -i 0002 source/root@0003 |<br />
    zfs receive -Fd dest<br />
# zfs send -i 0002 source/root/x@0003 |<br />
    zfs receive -Fd dest<br />
# zfs send -i 0002 source/root/y@0003 |<br />
    zfs receive -Fd dest</code></p>
<p>The recursive flag on <code>zfs destroy</code> takes care of all the dependent snapshots in one go.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/06/02/zfs-snapshotting-and-mirroring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ZFS haul-over in the face of a box shutdown.</title>
		<link>http://jang.blogs.ilrt.org/2008/05/06/zfs-haul-over-in-the-face-of-a-box-shutdown/</link>
		<comments>http://jang.blogs.ilrt.org/2008/05/06/zfs-haul-over-in-the-face-of-a-box-shutdown/#comments</comments>
		<pubDate>Tue, 06 May 2008 12:53:59 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[solaris]]></category>

		<category><![CDATA[zfs]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/05/06/zfs-haul-over-in-the-face-of-a-box-shutdown/</guid>
		<description><![CDATA[I&#8217;m now using default zpool paths (which implies an automatic import and mount on reboot).
I just imported the bb-archive.isys zpool onto the first host, then rebooted it. After it had shut down, I forcibly imported the zpool onto the second host. Now waiting for the first to come back up. It should, perhaps, complain that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m now using default zpool paths (which implies an automatic import and mount on reboot).</p>
<p>I just imported the <code>bb-archive.isys</code> zpool onto the first host, then rebooted it. After it had shut down, I forcibly imported the zpool onto the second host. Now waiting for the first to come back up. It should, perhaps, complain that the zpool is owned by someone else, but should not do a forcible reimport&#8230;</p>
<p>And alas, that&#8217;s not what happens. So:</p>
<p>I&#8217;m going to use altroots for all zpools. Unfortunately, this forces the subdirs to appear only mounted under the altroot. Not quite the combination I was after.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/05/06/zfs-haul-over-in-the-face-of-a-box-shutdown/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Networker, zfs.</title>
		<link>http://jang.blogs.ilrt.org/2008/05/06/networker-zfs/</link>
		<comments>http://jang.blogs.ilrt.org/2008/05/06/networker-zfs/#comments</comments>
		<pubDate>Tue, 06 May 2008 12:43:51 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[backup]]></category>

		<category><![CDATA[networker]]></category>

		<category><![CDATA[solaris]]></category>

		<category><![CDATA[zfs]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/05/06/networker-zfs/</guid>
		<description><![CDATA[OK, so nsr picks up the filesystems to try to save from /etc/vfstab. Fine, except that (a) that means it tries to back up the contractfs(!) and (b) ZFS doesn&#8217;t use vfstab entries for its filesystems.
Solution: specify the service IP address explicitly together with a bunch of paths under the networker configuration.
]]></description>
			<content:encoded><![CDATA[<p>OK, so nsr picks up the filesystems to try to save from <code>/etc/vfstab</code>. Fine, except that (a) that means it tries to back up the contractfs(!) and (b) ZFS doesn&#8217;t use <code>vfstab</code> entries for its filesystems.</p>
<p>Solution: specify the service IP address explicitly together with a bunch of paths under the networker configuration.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/05/06/networker-zfs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mapping MPxIO paths into something sane (array &#38; LUN ids)</title>
		<link>http://jang.blogs.ilrt.org/2008/04/24/mapping-mpxio-paths-into-something-sane-array-lun-ids/</link>
		<comments>http://jang.blogs.ilrt.org/2008/04/24/mapping-mpxio-paths-into-something-sane-array-lun-ids/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 16:15:05 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[lun]]></category>

		<category><![CDATA[mpxio]]></category>

		<category><![CDATA[san]]></category>

		<category><![CDATA[satabeast]]></category>

		<category><![CDATA[script]]></category>

		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/04/24/mapping-mpxio-paths-into-something-sane-array-lun-ids/</guid>
		<description><![CDATA[OK, so MPxIO &#8220;Just Works&#8221;. I exposed a small number of LUNs (four, to be precise) from each of a pair of SataBeasts. One of those had something on it: to wit, a prototypical &#8220;bb-archive&#8221; zpool.
zpool status etc. will show the MPxIO devices that comprise the particular zpool in question - but what about the [...]]]></description>
			<content:encoded><![CDATA[<p>OK, so MPxIO &#8220;Just Works&#8221;. I exposed a <em>small</em> number of LUNs (four, to be precise) from each of a pair of SataBeasts. One of those had something on it: to wit, a prototypical &#8220;bb-archive&#8221; zpool.</p>
<p><code>zpool status</code> etc. will show the MPxIO devices that comprise the particular zpool in question - but what about the other seven LUNs? And what about when it comes to stiching LUNs together, and so on? This is going to turn into a cross-referencing nightmare!<br />
<span id="more-36"></span><br />
OK, so the SataBeasts have fairly well-known IDs (their WWNs) and we can start there. Each LUN exposed by a SataBeast gets a randomly-allocated volume ID; both of these parts are visible within the derived device name that MPxio presents.</p>
<p>However, we typically plan and work using LUNs, rather than those volume IDs. So it&#8217;d be nice to at least get a way to dump that information.</p>
<p>That information is exposed in a number of places - <code>prtconf</code> will expose it, for instance - but it&#8217;s probably simpler to use <code>fcinfo</code>, as follows:</p>
<pre>$ <strong>which hbas</strong>
hbas () {
        fcinfo hba-port | awk &#8216;/^HBA Port WWN:/ {print $4}&#8217;
}
</pre>
<p>And to list the LUNs, we can use this:</p>
<pre>$ <strong>which luns</strong>
luns() {
        printf &#8216;HBA\t\t\trPort\t\t\tLUN\tPath\n&#8217;
        while [[ $# != 0 ]]
        do
                fcinfo remote-port -p &#8220;$1&#8243; -s |
                awk &#8216;
                        BEGIN { hba = &#8220;&#8216;&#8221;$1&#8243;&#8216;&#8221; }
                        /^Remote Port WWN:/ { rport = $4 }
                        /LUN:/ { lun = $2 }
                        /OS Device Name:/ {
                                print hba &#8220;\t&#8221; rport &#8220;\t&#8221; lun &#8220;\t&#8221; $4
                        }
                &#8216;
                shift
        done
}
</pre>
<p>Then:</p>
<p><code># luns $( hbas )</code></p>
<p>provides what we&#8217;re after in a tabular form.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/04/24/mapping-mpxio-paths-into-something-sane-array-lun-ids/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Multipathing success.</title>
		<link>http://jang.blogs.ilrt.org/2008/04/24/multipathing-success/</link>
		<comments>http://jang.blogs.ilrt.org/2008/04/24/multipathing-success/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 14:02:13 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[multipath]]></category>

		<category><![CDATA[san]]></category>

		<category><![CDATA[satabeast]]></category>

		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/04/24/multipathing-success/</guid>
		<description><![CDATA[# mpathadm list lu
        /dev/rdsk/c7t6000402001FC19CA6E9E7EFE00000000d0s2
                Total Path Count: 2
                Operational Path Count: 2
&#8230; and so on :-)
]]></description>
			<content:encoded><![CDATA[<p><code># mpathadm list lu<br />
        /dev/rdsk/c7t6000402001FC19CA6E9E7EFE00000000d0s2<br />
                Total Path Count: 2<br />
                Operational Path Count: 2</code></p>
<p>&#8230; and so on :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/04/24/multipathing-success/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NFS machine HBAs turned up at last.</title>
		<link>http://jang.blogs.ilrt.org/2008/04/24/nfs-machine-hbas-turned-up-at-last/</link>
		<comments>http://jang.blogs.ilrt.org/2008/04/24/nfs-machine-hbas-turned-up-at-last/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 13:45:02 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[nfs]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/04/24/nfs-machine-hbas-turned-up-at-last/</guid>
		<description><![CDATA[OK, so we&#8217;ve been waiting for these for weeks. D*ll kept on pushing the dates back. For a pair of HBAs, FFS!
Order went into Redstor last night at 4pm. They were here this morning by 9am.
Spot the difference.
]]></description>
			<content:encoded><![CDATA[<p>OK, so we&#8217;ve been waiting for these for weeks. D*ll kept on pushing the dates back. For a pair of HBAs, FFS!</p>
<p>Order went into Redstor last night at 4pm. They were here this morning by 9am.</p>
<p>Spot the difference.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/04/24/nfs-machine-hbas-turned-up-at-last/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MBS (deployment) work.</title>
		<link>http://jang.blogs.ilrt.org/2008/04/24/mbs-deployment-work/</link>
		<comments>http://jang.blogs.ilrt.org/2008/04/24/mbs-deployment-work/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 13:39:16 +0000</pubDate>
		<dc:creator>jang</dc:creator>
		
		<category><![CDATA[haste]]></category>

		<category><![CDATA[appinf]]></category>

		<category><![CDATA[configuration management]]></category>

		<category><![CDATA[deployment]]></category>

		<category><![CDATA[mail]]></category>

		<guid isPermaLink="false">http://jang.blogs.ilrt.org/2008/04/24/mbs-deployment-work/</guid>
		<description><![CDATA[I&#8217;ve decided to bring this forward a bit. This is somewhat motivated by the need to get spam[34] up and running so that Adam can start to move his build scripts to target the MBS deployment infrastructure.

There was a tentative plan to SAN-attach the MBS. I&#8217;d much rather supply its disk off NFS, which is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve decided to bring this forward a bit. This is somewhat motivated by the need to get spam[34] up and running so that Adam can start to move his build scripts to target the MBS deployment infrastructure.<br />
<span id="more-33"></span></p>
<p>There was a tentative plan to SAN-attach the MBS. I&#8217;d much rather supply its disk off NFS, which is must faster to find a replacement host for. My plan is to rebuild the MBS setup on hereford (currently a farm host on PRE) and punt defiant back into the farm.</p>
<p>We&#8217;ve seen some issues in keeping a pair of MBS DB instances in sync; I&#8217;m looking forward to using some of my upcoming copious free time to do some fairly hefty development work on the MBS side (which is long overdue). In order to make this work smoothly and to help with patch management, I&#8217;m planning on making a change to the way the MBS is laid out, as follows:</p>
<ul>
<li>all MBS checkouts will go directly onto NFS-supplied disk. We&#8217;ll also be supplying home dirs from the NFS cluster so that we aren&#8217;t in any danger of running out of elbow-room.</li>
<li>the <code>mbs/src</code>, <code>mbs/zfs</code>, <code>mbs/apache</code> and other &#8220;common infrastructure&#8221; parts will live under one repo, laid out as follows:
<p>        <code>mbs.src/trunk</code>   HEAD, development happens here (or on dev branches)<br />
        <code>mbs.src/branches/mbs.pre</code>        HEAD pushed out to here<br />
        <code>mbs.src/branches/mbs.prod</code>       &#8230;and here<br />
        <code>mbs.src/branches/...</code>            &#8230;and so on.</p>
<p>The mbs.src repo will not only contain the code for deployment methods; it&#8217;ll also have a skeletal mbs/db that contains the core artifacts common to all database instances: the platform-deployment, bootloader, and os images. These can then be maintained from a single spot.</p>
<p><em>Note: in fact I think I might further split up <code>mbs.src</code> and <code>mbs.db</code> into two repos, and put the large OS images under the latter, out of the way of the deployment method implementations.</em></li>
<li>all MBS database instances will then be built as separate repos. Each repo will contain <code>svn:externals</code> pointers to the <code>mbs.src:src/</code>, <code>mbs.db:db/image</code>, etc, subdirectories that should be centrally maintained. I may well punt software images (apache, tomcat, etc) into this too.</li>
<li>This shouldn&#8217;t make the blindest bit of difference to any of the scripts, with the exception that the apache <code>users.xml</code> and <code>groups.xml</code> will need to be moved out of those particular subdirectories.</li>
<li>Checkouts: finally - I&#8217;m strongly tempted to run each MBS instance under its own &#8220;zone&#8221; using OpenVZ. There have been some issues with the PXE platform-deployment instances getting in the way of each other; this&#8217;ll let me split them up cleanly.</li>
</ul>
<p>Schedule: Initially, I said that once the NFS service was bedded down I&#8217;d begin this work, andexpect it to run over the summer. At some point there&#8217;d be a cutover as the new MBS comes into service.</p>
<p>Actually, I&#8217;m going to start prepping this now. This&#8217;ll mean cutting a new pair of  repos for <code>mbs.src</code> and migrating the existing history into it.</p>
<p>Once that it done I&#8217;ll put a freeze on the <code>src/</code> and other non-db trees whilst I rejig the existing repositories. I expect that the tidy-up work there will take a day or so to sort out, some time in the next couple of weeks.</p>
<p>I&#8217;ll also be rolling out a third (count &#8216;em!) MBS DB instance for the mail system stuff. Initially this&#8217;ll be for the spam boxes, although we might look at managing the webmail through this too, since it looks eminently amenable to that treatment.</p>
]]></content:encoded>
			<wfw:commentRss>http://jang.blogs.ilrt.org/2008/04/24/mbs-deployment-work/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
