<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>join-fu! &#187; jaypipes</title>
	<atom:link href="http://www.joinfu.com/author/jaypipes/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joinfu.com</link>
	<description>the art of sql</description>
	<lastBuildDate>Mon, 23 Jan 2012 20:21:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Looking for a Few Good Engineers</title>
		<link>http://www.joinfu.com/2012/01/looking-for-a-few-good-engineers/</link>
		<comments>http://www.joinfu.com/2012/01/looking-for-a-few-good-engineers/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 20:21:51 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=400</guid>
		<description><![CDATA[Do you know Python? Do you get a thrill breaking other people&#8217;s code? Do you have experience with Chef, Puppet, Cobbler, Orchestra, or Jenkins? Have you ever deployed or worked on highly distributed systems? Do you understand virtualization technologies like KVM, Xen, ESX or Hyper-V? If you answered &#8220;Yes!&#8221; to any of the questions above [...]]]></description>
			<content:encoded><![CDATA[<p>
Do you know Python? Do you get a thrill breaking other people&#8217;s code? Do you have experience with Chef, Puppet, Cobbler, Orchestra, or Jenkins? Have you ever deployed or worked on highly distributed systems? Do you understand virtualization technologies like KVM, Xen, ESX or Hyper-V?
</p>
<p>
If you answered &#8220;<em>Yes!</em>&#8221; to <em><strong>any</strong></em> of the questions above <em><strong>and</strong></em> are interested in working in a distributed, high-energy engineering team on solving complex problems with cloud infrastructure software, I want to hear from you. Experience with <a href="http://openstack.org" title="OpenStack">OpenStack</a> is a huge plus.
</p>
<p>
I&#8217;m looking for <strong>QA software engineers</strong>, <strong>software deployment and/or automation engineers</strong> and <strong>software developers</strong> that can hit the ground running and make a big impact from Day One. Feel free to email me at <code>REVERSE('moc.liamg@sepipyaj')</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2012/01/looking-for-a-few-good-engineers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diagnose and fix PEP8 issues during code review</title>
		<link>http://www.joinfu.com/2012/01/diagnose-and-fix-pep8-issues-during-code-review/</link>
		<comments>http://www.joinfu.com/2012/01/diagnose-and-fix-pep8-issues-during-code-review/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 19:13:25 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=394</guid>
		<description><![CDATA[I figured I&#8217;d write a quick post about how to deal with &#8220;pep8 issues&#8221; that come up during code reviews on OpenStack core projects. These issues come up often for new contributors, and it can be a source of frustration until the contributor understands how to diagnose and fix the issues that come up. PEP8 [...]]]></description>
			<content:encoded><![CDATA[<p>I figured I&#8217;d write a quick post about how to deal with &#8220;pep8 issues&#8221; that come up during code reviews on <a title="OpenStack" href="http://openstack.org">OpenStack</a> core projects. These issues come up often for new contributors, and it can be a source of frustration until the contributor understands how to diagnose and fix the issues that come up.</p>
<p><a title="PEP8" href="http://www.python.org/dev/peps/pep-0008/">PEP8</a> is the Python <a title="What is a PEP?" href="http://www.python.org/dev/peps/pep-0001/">PEP</a> that deals with a recommended code style. All core (and periphery Python) OpenStack projects validate that new code pushed to the source tree is &#8220;pep8-compliant&#8221;. When a new patchset is pushed from code review to Jenkins for the set of automated pre-merge tests, the pep8 command-line tool is run against the new source tree to ensure it meets PEP8 code style standards.</p>
<p>If this PEP8 Jenkins job fails, the code submitter will see a notification that the job failed, and the contributor must fix up any pep8 issues and push those fixes up for review again. Typically, this notification looks something like this:</p>
<pre>
Change subject: Added Keypair extension (os-keypairs) client and tests LP#900139
......................................................................

Patch Set 2: I would prefer that you didn't submit this

Build Unstable

https://jenkins.openstack.org/job/gate-tempest-pep8/38/ : UNSTABLE
https://jenkins.openstack.org/job/gate-tempest-merge/78/ : SUCCESS

--
To view, visit https://review.openstack.org/3179
To unsubscribe, visit https://review.openstack.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I34c7e9aa6a1796b8d4c3ac9b3b69438796752866
Gerrit-PatchSet: 2
Gerrit-Project: openstack/tempest
Gerrit-Branch: master
Gerrit-Owner: kavan-patil
Gerrit-Reviewer: Brian Waldon <brian.waldon@rackspace.com>
Gerrit-Reviewer: Jay Pipes <jaypipes@gmail.com>
Gerrit-Reviewer: Jenkins
Gerrit-Reviewer: kavan-patil
</pre>
<p>
There are a couple ways you can diagnose what style points your code violated. Probably the easiest and fastest is to just follow the link in the notification email to the Jenkins job. Clicking the link above, I get to the Jenkins job page, which looks like this:
</p>
<p style="text-align: center;"><a href="http://www.joinfu.com/wp-content/uploads/2012/01/jenkins_job_pep8.png"><img class="size-full wp-image-395 aligncenter" style="border: 1px solid black;" title="jenkins_job_pep8" src="http://www.joinfu.com/wp-content/uploads/2012/01/jenkins_job_pep8.png" alt="" width="603" height="544" /></a></p>
<p>
Clicking on the graph, I get to a details screen showing the source files and lines of code that violated pep8 rules:
</p>
<p style="text-align: center;"><a href="http://www.joinfu.com/wp-content/uploads/2012/01/jenkins_job_pep8_violations.png"><img class="aligncenter size-full wp-image-396" style="border: 1px solid black;" title="jenkins_job_pep8_violations" src="http://www.joinfu.com/wp-content/uploads/2012/01/jenkins_job_pep8_violations.png" alt="" width="698" height="467" /></a></p>
<p>
I can then go to line 86 of <code>tempest/openstack.py</code> and investigate the code style
</p>
<p>
Alternately, I could run the pep8 CLI tool on my local branch, which will tell me the pep8 violations and what to fix, as shown here:
</p>
<pre>
jpipes@uberbox:~/repos/tempest$ pep8 --repeat tempest
tempest/openstack.py:86:73: W292 no newline at end of file
</pre>
<p>
There we are&#8230; the <code>tempest/openstack.py</code> file doesn&#8217;t end with a newline. An easy fixup. <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2012/01/diagnose-and-fix-pep8-issues-during-code-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Science (or Art?) of Commit Messages</title>
		<link>http://www.joinfu.com/2012/01/the-science-of-commit-messages/</link>
		<comments>http://www.joinfu.com/2012/01/the-science-of-commit-messages/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 19:26:22 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=392</guid>
		<description><![CDATA[There are some things in the world of development that you appreciate much more when you do a lot of code reviews. One of those things is commit messages. At first glance, commit messages seem to be a small, relatively innocuous thing for a developer. When you commit code, you type in some description about [...]]]></description>
			<content:encoded><![CDATA[<p>
There are some things in the world of development that you appreciate much more when you do a lot of code reviews. One of those things is commit messages.
</p>
<p>
At first glance, commit messages seem to be a small, relatively innocuous thing for a developer. When you commit code, you type in some description about your code changes and then, typically, push your code somewhere for review by someone.
</p>
<p>
Regardless of whether the code you pushed is going to an open source project, an internal proprietary code repository, or just some code exchanged between friends working on a joint project, that simple little commit message tells the person reading your code a whole lot about you. It speaks volumes about the way you feel about the code you submit and the quality of the review you <em>expect</em> for your code.
</p>
<p>
As an example, suppose I was working on some code that fixed a bug. I got my code ready for initial review and I did the following:
</p>
<pre>
$> git commit -a -m "Fixes some stuff"
</pre>
<p>
And then I push my commit somewhere using <code>git push</code> &#8230;
</p>
<p>
Inevitably, what happens is that another developer will get some email or notification that I have pushed code up to some repository. It is likely that this notification will look something like this:
</p>
<pre>
Change subject: Fixes some stuff
......................................................................

Fixes some stuff

Change-Id: I79bbac32b5c99742b5cb283c6e55e6204bf92adc
---
M path/to/some/changed/file
1 file changed, 1 insertion(+), 1 deletion(-)
</pre>
<p>
And in the notification will be some link to a place to go do a code review.
</p>
<p>
Now, what do you think is the first thought that goes through the reviewer&#8217;s mind? My guess would be: <em>Really? Fixes <strong>what</strong> stuff?</em> By not including any context about what the patch is attempting to solve, you leave the reviewer with a bad taste in their mouth. And a bad taste in the reviewer&#8217;s mouth generally means one thing: <em>a reluctance to review your patch</em>.
</p>
<p>
OK, so what could we do to make the commit message better, to provide the reviewer with more initial context about your patch? Well, the first thing that comes to mind is to reference a specific bug that you are fixing with this patch.
</p>
<p>
Alright, so we amend our commit message to include a bug identifier:
</p>
<pre>
$> git commit --amend -m "Fixes Bug 123456"
</pre>
<p>
And subsequently push our amended commit message. The reviewer now gets a new notification that you&#8217;ve amended a previous patch. Now the notification includes the bug identifier. What do you think the next thought a typical reviewer might have? My guess is this: <em>What, does this developer think that I&#8217;ve memorized all the bug IDs for all open bugs? How should I know what Bug 123456 is about?</em> And here comes that bad taste in the mouth again.
</p>
<p>
OK, so this time, we will forgo the use of the time-saving <code>-m</code> switch to <code>git commit</code> and actually type a proper, multi-line commit message in our editor of choice that describes the bug that our patch fixes, including a brief description of how we fixed the bug:
</p>
<pre>
git commit --amend  # This will open up your editor...
</pre>
<p>
Now we&#8217;d enter a good commit message &#8230; something like this would work:
</p>
<pre>
Fixes Bug 123456 - ImportError raised improperly in Storage Driver

Due to a circular dependency, an ImportError was improperly
being thrown when the storage driver was set to XYZ. Rearranged
code to remove circular dependency.
</pre>
<p>
The commit message now will give the reviewer everything they need in the notification to understand what the patch is for and how you solved a bug, without needing to go to their bug tracker to figure out what the bug was about.
</p>
<p>
A detailed commit message shows you care about the time that reviewers spend on your patch and that you value the code you are submitting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2012/01/the-science-of-commit-messages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentation: OpenStack QA &#8211; Walkthrough of Processes, Tools and Code</title>
		<link>http://www.joinfu.com/2012/01/openstack-qa-walkthrough-of-processes-tools-and-code/</link>
		<comments>http://www.joinfu.com/2012/01/openstack-qa-walkthrough-of-processes-tools-and-code/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 22:22:38 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=390</guid>
		<description><![CDATA[Last night I gave a short webinar to some folks about the basics of contributing to the Tempest project, which is the OpenStack integration test suite. It was the first time I&#8217;d used Google Docs to create and give a presentation and I must say I was really impressed with the ease-of-use of Google Docs [...]]]></description>
			<content:encoded><![CDATA[<p>
Last night I gave a short webinar to some folks about the basics of contributing to the <a href="http://github.com/openstack/tempest" title="Tempest - OpenStack Integration Test Suite">Tempest</a> project, which is the OpenStack integration test suite. It was the first time I&#8217;d used Google Docs to create and give a presentation and I must say I was really impressed with the ease-of-use of Google Docs Presentation. Well done, Google.
</p>
<p>
Anyway, I&#8217;ve uploaded a <a href="http://joinfu.com/presentations/openstack-qa-processes/openstack-qa-processes.pdf" title="OpenStack QA Processes">PDF of the presentation</a> to this website and provided a link to the Google Docs presentation along with a brief overview of the topics covered in the slides below. As always, I love to get feedback on slides. Feel free to leave a comment here, email me or find me on IRC. Enjoy!
</p>
<p><img src="http://joinfu.com/presentations/openstack-qa-processes/openstack-qa-processes.png" style="float: left; margin: 0px 40px 10px 0px;"/><img src="http://joinfu.com/img/html.png" /><a href="https://docs.google.com/presentation/d/1M3XhAco_0u7NZQn3Gz53z9VOHHrkQBzEs5gt43ZvhOc/edit"  title="OpenStack QA - Walkthrough of Processes, Tools and Code">Google Presentation (HTML)</a><br />
<img src="http://joinfu.com/img/pdf.png" /><a href="http://joinfu.com/presentations/openstack-qa-processes/openstack-qa-processes.pdf"  title="OpenStack QA - Walkthrough of Processes, Tools and Code">PDF  slides</a><br />
<br clear="left" /><br />
Topics included in the slides:</p>
<ul>
<li>OpenStack Contribution Process</li>
<li>Running Devstack Locally</li>
<li>Running Tempest against an Environment</li>
<li>Walkthrough the Tempest Source Code</li>
<li>Progressively improving a test case</li>
<li>Common Scenarios in Code Review and Submission</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2012/01/openstack-qa-walkthrough-of-processes-tools-and-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenStack One of 10 Most Important Open Source Projects in 2011</title>
		<link>http://www.joinfu.com/2011/12/openstack-one-of-10-most-important-open-source-projects-in-2011/</link>
		<comments>http://www.joinfu.com/2011/12/openstack-one-of-10-most-important-open-source-projects-in-2011/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 18:23:37 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[openstack]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=388</guid>
		<description><![CDATA[Joe &#8220;Zonker&#8221; Brockmeier recently posted his list of the top 10 most important open source projects of 2011, and OpenStack was in there. I agree that OpenStack is one of the most compelling open source projects this year. I think back to the Cactus release earlier in the year and really am amazed at the [...]]]></description>
			<content:encoded><![CDATA[<p>Joe &#8220;Zonker&#8221; Brockmeier recently posted his list of the <a href="https://www.linux.com/news/featured-blogs/196:zonker/524082:the-10-most-important-open-source-projects-of-2011">top 10 most important open source projects of 2011</a>, and OpenStack was in there.</p>
<p>I agree that OpenStack is one of the most compelling open source projects this year. I think back to the Cactus release earlier in the year and really am amazed at the amount of change in many of the core OpenStack projects &#8212; Nova in particular. We&#8217;ve had an explosion of contribution from a ton of individuals working at a who&#8217;s who list of technology companies, and I expect to see that passion and enthusiasm for OpenStack only continue to grow through 2012. Lots to look forward to. <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Here&#8217;s to an innovative 2012 and continued collaboration in the open source community on this terrific set of cloud infrastructure projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2011/12/openstack-one-of-10-most-important-open-source-projects-in-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenStack Dev Tip &#8212; Easily Pull a Review Branch</title>
		<link>http://www.joinfu.com/2011/11/openstack-easily-pull-review-branch/</link>
		<comments>http://www.joinfu.com/2011/11/openstack-easily-pull-review-branch/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 18:06:08 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=386</guid>
		<description><![CDATA[Just a quick tip for developers working on OpenStack projects that work on multiple development machines or want to pull a colleague&#8217;s code from the Gerrit review system and test it locally. If you have followed the instructions about setting up a development environment successfully, you will have installed the git-review tool that Jim Blair [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick tip for developers working on OpenStack projects that work on multiple development machines or want to pull a colleague&#8217;s code from the Gerrit review system and test it locally.</p>
<p>If you have followed the <a href="http://wiki.openstack.org/GerritWorkflow" title="OpenStack Gerrit - Development Environment">instructions</a> about setting up a development environment successfully, you will have installed the git-review tool that Jim Blair and Monty Taylor maintain. The git-review tool has a nice little feature that enables you to easily pull any branch that anyone has pushed up to code review:</p>
<pre>
$> git review -d $REVIEW_NUM
</pre>
<p>The <code>$REVIEW_NUM</code> variable should be replaced with the identifier of the review branch in Gerrit.</p>
<p>For example, I developed some code on my laptop that I now want to pull to my beefier work machine. The original branch is failing a few tests in Jenkins and I want to diagnose what&#8217;s going on. The review branch is here: https://review.openstack.org/#change,1656. The review number (ID) is <strong>1656</strong>.</p>
<p>To grab that branch into my local environment and check it out, I do:</p>
<pre>
jpipes@uberbox:~/repos/glance$ git review -d 1656
Downloading refs/changes/56/1656/2 from gerrit into review/jay_pipes/bug/850377
</pre>
<p>Doing a git status, you&#8217;ll note that I am now in the local branch called review/jay_pipes/bug/850377:</p>
<pre>
jpipes@uberbox:~/repos/glance$ git status
# On branch review/jay_pipes/bug/850377
# Your branch and 'gerrit/master' have diverged,
# and have 1 and 2 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
</pre>
<p>I can now run tests, diagnose the issue(s), fix code up and do a:</p>
<pre>
$> git commit -a --amend
$> git review
</pre>
<p>And my changes will be pushed up to the original review in Gerrit for others to look at.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2011/11/openstack-easily-pull-review-branch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Essex Design Summit &#8212; QA Sessions to Note</title>
		<link>http://www.joinfu.com/2011/10/essex-design-summit-qa-sessions-to-note/</link>
		<comments>http://www.joinfu.com/2011/10/essex-design-summit-qa-sessions-to-note/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 14:47:53 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=381</guid>
		<description><![CDATA[There are quite a few folks interested in QA coming to the OpenStack Essex Design Summit next week. I wanted to give you all a heads-up on the sessions that may be of interest to you. Here they are: Monday, Oct 3rd: 09:30-10:25 &#8211; Essex Release Cycle Thierry Carrez, our illustrious release manager, will do [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://essexdesignsummit.sched.org/"><img class="alignnone" title="Essex Design Summit" src="http://essexdesignsummit.sched.org/img/logo.png" alt="Essex Design Summit" width="918" height="119" /></a></p>
<p>There are quite a few folks interested in QA coming to the <a href="http://essexdesignsummit.sched.org/">OpenStack<br />
Essex Design Summit</a> next week. I wanted to give you all a heads-up on<br />
the sessions that may be of interest to you.</p>
<p>Here they are:</p>
<p>Monday, Oct 3rd:</p>
<p>09:30-10:25 &#8211; <a href="http://essexdesignsummit.sched.org/event/6a56ba48d52da3a46f85699e82097901">Essex Release Cycle</a></p>
<p>Thierry Carrez, our illustrious release manager, will do a post-mortem<br />
on the Diablo release cycle and discuss potential changes for the<br />
Essex release cycle. I know almost all QAers have expressed desires to<br />
have maintenance branches managed by the QA team and I&#8217;ve heard<br />
suggestions about various QA-centric freeze points. Those interested<br />
in advocating for these things should plan to attend this session.</p>
<p>14:00-14:45 &#8211; <a href="http://essexdesignsummit.sched.org/event/ad2f43c3c900a2412e3981b8ea857181">Stable Release Updates</a></p>
<p>Dave Walker from Canonical plans to outline some possibilities for how<br />
to maintain and update stable releases of OpenStack projects.</p>
<p>15:00-15:45 &#8211; <a href="http://essexdesignsummit.sched.org/event/66f38d3bb4a1b8b169b81179e7f03215">Separating API from Implementation of the API</a></p>
<p>Total self-promotion of a session I&#8217;ve proposed&#8230; I think anyone<br />
interested in stabilizing the OpenStack APIs and having OpenStack APIs<br />
become the open standards for the cloud computing industry should<br />
attend.</p>
<p>16:30-17:15 &#8211; <a href="http://essexdesignsummit.sched.org/event/dc89ee807f4cee6718cda6549b737e3d">OpenStack Compute API 2.0</a></p>
<p>Glen Campbell will be leading a discussion about how to improve the<br />
Compute (Nova) API for a 2.0 API series. I think it&#8217;s important that a<br />
number of folks on the QA team attend this session and get an idea of<br />
the things that we will be looking at in the future regarding the<br />
Compute API. Personally, I&#8217;m definitely planning on attending this<br />
one.</p>
<p>17:30 &#8211; 17:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/c68faab3984bba3003adfc75a0cb0103">NetStack Continuous Integration Planning</a></p>
<p>Personally, I will not be at this session as I have another session to<br />
lead. However, I think it is important that a number of people from<br />
the QA team attend this session, listen to the needs of the NetStack<br />
contributors, voice our support for their projects, explain what the<br />
goals of our team are, and enable some cross-team collaborative<br />
efforts around CI and QA.</p>
<p>Tuesday, Oct 4th:</p>
<p>09:30 &#8211; 09:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/b4ee36022573ad50b1e23e9788226e84">Documentation Strategies for OpenStack</a></p>
<p>Anne Gentle will be leading a discussion about documentation of<br />
OpenStack projects. One of the deliverables of the OpenStack QA team<br />
is clearly to identify areas where specifications don&#8217;t match<br />
behaviour, so I think it&#8217;s pretty critical that the Doc Team and the<br />
QA team be on the same page when it comes to how to coordinate<br />
communication of documentation discrepancies.</p>
<p>09:30 &#8211; 09:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/e9c0baa7a606f320777e04baf531469c">VM Disk Management in Nova</a></p>
<p>At the same time as the documentation session, Paul Voccio is leading<br />
a discussion about VM disk management in Nova. Those QAers focusing on<br />
disk/volume management may want to attend this session to ensure the<br />
QA team has a good grasp of changes coming in this arena.</p>
<p>10:00 &#8211; 10-25 &#8211; <a href="http://essexdesignsummit.sched.org/event/4a20ba873ff18cb14eccf0392ba7aff7">OpenStack Common</a></p>
<p>Brian Lamar will be leading a discussion on getting serious about the<br />
potential of an openstack-common Python library of common code shared<br />
amongst many OpenStack projects. Hey, it&#8217;s a heck of a lot easier to<br />
QA code that&#8217;s in one location than the same code, written with slight<br />
differences, spread across many projects&#8230; seems like a no-brainer<br />
for the QA team to attend and support this idea. <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>11:00 &#8211; 11:25 &#8211; <a href="http://essexdesignsummit.sched.org/event/cb1331a198be5ed4920d2ab4eb508a4b">Monitoring in Swift</a></p>
<p>John Dickinson will be leading a session to discuss what things should<br />
be monitored across a Swift cluster, and what tools are available for<br />
monitoring. I think this discussion will be valuable for those of us<br />
interested in long-running production integration tests where Swift is<br />
one of the components of a full OpenStack test cluster.</p>
<p>12:00 &#8211; 12:25 &#8211; <a href="http://essexdesignsummit.sched.org/event/8477f29c978a90edef7e0fbca5786dc0">Integration Test Suites and Gating Trunk</a></p>
<p>A no brainer&#8230; in this session we will talk about the various<br />
integration test suites for Nova/Glance/Keystone and discuss the<br />
effort already underway to combine them. In addition, we will talk<br />
about what policies to recommend for OpenStack projects regarding what<br />
level of passing integration tests should hold up a gated trunk.</p>
<p>15:30 &#8211; 15:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/d621cc6cc3bbdc9d8df1a4909d6799ac">Making VM State Handling More Robust</a></p>
<p>Phil Day is leading a discussion about ways in which the handling of<br />
VM state transitions can be inconsistent and confusing. Since the QA<br />
team is responsible for documenting just such inconsistencies and<br />
building tests cases for such inconsistent behaviour, I think this<br />
session would be good to hang around in and listen/take notes.</p>
<p>16:30 &#8211; 17:25 &#8211; <a href="http://essexdesignsummit.sched.org/event/787dd036c1a093d52a72274a8f8561ca">OpenStack Faithful Implementation Test Suites (FITS)</a></p>
<p>Josh McKenty will be talking about certain proposals regarding a FITS<br />
for OpenStack APIs. Should be an interesting session <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wednesday, Oct 5th:</p>
<p>09:30 &#8211; 10:25 &#8211; <a href="http://essexdesignsummit.sched.org/event/468aa6159fc652d020039092b22ad4c1">XenServer/KVM Feature Parity Plan</a></p>
<p>This session should be good for those QAers interested in identifying<br />
areas where feature parity between hypervisors is lacking, and<br />
discussing ways in which the QA team can document these disparities<br />
and produce tests for identifying future disparity among hypervisors.</p>
<p>11:00 &#8211; 11:45 &#8211; <a href="http://essexdesignsummit.sched.org/event/cc26b70de1216fe4ad405fbcbf2cdf15">Glance Throughput Improvements</a></p>
<p>This session is being led by Tim Reddins, from HP, who (along with his<br />
team) have done some analysis on ways to improve Glance&#8217;s throughput.<br />
QAers interested in stress, capacity, and parallelism testing should<br />
definitely attend!</p>
<p>11:30 &#8211; 11:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/216ab8d07988c057b3d3a93a074aa365">Nova Upgrades</a></p>
<p>Ray Hookway will talk about ways that Nova&#8217;s update process can be<br />
made more robust. I imagine that the talk&#8217;s recommendations will be<br />
generally applicable to many OpenStack projects, not just Nova. I also<br />
think that some members of the QA team should attend &#8212; we should be<br />
able to create functional tests for upgrade processes for all<br />
OpenStack projects&#8230;</p>
<p>14:30 &#8211; 14:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/564323cb448c852eeeba7b9164e0ee94">Git/Gerrit Best Practices</a></p>
<p>Monty Taylor is leading this session on Gerrit/Git best practices. I<br />
recommend everyone go, if only to see the fireworks.</p>
<p>15:30 &#8211; 15:55 &#8211; <a href="http://essexdesignsummit.sched.org/event/127dd59068e1bab0da6805c3f012fc22">Quality Assurance in OpenStack</a></p>
<p>Uhm, duh, you should all be at this one. <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  We&#8217;ll discuss how to<br />
divide the voluminous amount of work among our members, talk about<br />
which projects (and components within certain projects) are<br />
high-priority items, the ways we should communicate and track<br />
progress, etc</p>
<p>17:00 &#8211; 17:25 &#8211; <a href="http://essexdesignsummit.sched.org/event/540ebb9f4e764c8cbfcfb1df49ccd4ad">Internal Service Communication</a></p>
<p>Brian Waldon is leading a session on internal service communication<br />
that should be quite interesting. The integration testing coverage of<br />
major internal service components of Nova is currently light, and is<br />
one of those areas I think should be carefully picked over by our QA<br />
team.</p>
<p>OK, that&#8217;s the recommendations from me, but of course, feel free to<br />
attend whatever sessions are of most interest to you. I&#8217;m very much<br />
looking forward to meeting all of you (we&#8217;re up to 28 members as of<br />
this writing).</p>
<p>Cheers, and see you tomorrow!<br />
<span style="color: #888888;">-jay</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2011/10/essex-design-summit-qa-sessions-to-note/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What the Heck is Hyperscale?</title>
		<link>http://www.joinfu.com/2011/02/what-the-heck-is-hyperscale/</link>
		<comments>http://www.joinfu.com/2011/02/what-the-heck-is-hyperscale/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 22:01:42 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[openstack]]></category>
		<category><![CDATA[Thought Tree]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=377</guid>
		<description><![CDATA[&#60;rant&#62; Please, can we not use the term &#8220;hyperscale&#8221;. It doesn&#8217;t have any meaning at all. If you say &#8220;a cloud that has 10,000 physical hosts&#8221; or &#8220;a cloud that supports 100,000 concurrent accounts&#8221; or even &#8220;a cloud that grows baby elephants&#8221;, then people will understand what you mean. Otherwise, nobody really knows what you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>&lt;rant&gt;<br />
Please, can we not use the term &#8220;hyperscale&#8221;. It doesn&#8217;t have any meaning at all.</p>
<p>If you say &#8220;a cloud that has 10,000 physical hosts&#8221; or &#8220;a cloud that supports 100,000 concurrent accounts&#8221; or even &#8220;a cloud that grows baby elephants&#8221;, then people will understand what you mean. Otherwise, nobody really knows what you&#8217;re talking about and it&#8217;s all just marketing-speak in the same vein of Microsoft&#8217;s &#8220;Get Me to the Cloud&#8221; commercials.<br />
&lt;/rant&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2011/02/what-the-heck-is-hyperscale/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Developing Nova on Linux &#8211; Getting Started</title>
		<link>http://www.joinfu.com/2010/07/developing-nova-on-linux-getting-started/</link>
		<comments>http://www.joinfu.com/2010/07/developing-nova-on-linux-getting-started/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 19:01:36 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[Bazaar]]></category>
		<category><![CDATA[Launchpad]]></category>
		<category><![CDATA[openstack]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=373</guid>
		<description><![CDATA[In the past few weeks, I&#8217;ve gotten involved in the newly-debuted OpenStack project. Right now, my focus is on the Compute sub-project of the stack, called Nova. The initial pieces I am focusing on are the unit tests and end-to-end systems testing of the compute stack. I struggled over the last couple days to solve [...]]]></description>
			<content:encoded><![CDATA[<p>In the past few weeks, I&#8217;ve gotten involved in the newly-debuted <a href="http://openstack.org">OpenStack</a> project.  Right now, my focus is on the Compute sub-project of the stack, called <a href="http://launchpad.net/nova/">Nova</a>.  The initial pieces I am focusing on are the unit tests and end-to-end systems testing of the compute stack.</p>
<p>I struggled over the last couple days to solve a bug that turned out to be not a bug at all, but an issue with the Python development environment I use.  I figured I&#8217;d write a blog article for those Python developers who are looking to contribute to the Nova project and may also be struggling to get up and going.  </p>
<p>If you&#8217;re contributing to an open source project like Nova, you&#8217;ll want to be able to work on multiple branches of the source code at the same time &mdash; for instance, if you&#8217;re working on fixing a few bugs simultaneously.  </p>
<p>There are quite a few dependencies for Nova, and, because of the way Python searches for packages, it&#8217;s imperative that you use a tool such as <tt>virtualenv</tt> to isolate your multiple branches into their own development environments.  Otherwise, as I learned today, the location of your site-packages and what has previously been installed on your development machine can wreak havoc on you. <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="border: solid 1px #ccc; background-color: #f7f7f7; padding: 15px 40px;">
<strong style="color: red;">NOTE</strong>: For this article, I assume the reader is on Debian/Ubuntu Linux, since that is what I use as my development machine.  If you&#8217;re on a different flavour of Linux, feel free to adapt the instructions here to suit your particular package manager.
</div>
<h2>Installing the Tools for Installing the Tools</h2>
<p>Before we get into our virtual development environments, you&#8217;ll first want to ensure you&#8217;ve got a few packages installed, including <tt>bzr</tt>, <tt>libssl-dev</tt>, <tt>swig</tt> and <tt>virtualenv</tt>.  The following should do the trick:</p>
<pre>
sudo apt-get install -y swig libssl-dev bzr python-virtualenv
</pre>
<h2>A Setup for Source Control and Virtual Environments</h2>
<p>In order to get properly setup to contribute to the Nova project, you&#8217;ll want to setup a local repository to keep branches of source code that you work on.  Although <tt>bzr</tt> is not required as your revision control system, I use <tt>bzr</tt> myself and will use it in this article.  Adapt as needed if you use <tt>git-bzr</tt> or similar.</p>
<p>I like to have the following directory structure for working on Python projects:</p>
<pre>
~/repos/$projectname/ <-- shared repository for branches of your project
~/repos/$projectname/trunk <-- local trunk branch
~/repos/$projectname/$branch <-- a branch you work in
~/virtenvs/$projectname/ <-- Development environments for your project
~/virtenvs/$projectname/$branch <-- development environment for a branch you work in
</pre>
<p>Assuming you want to contribute to the Nova project and you want to work on fixing a bug #XXXXX, then following would get you started:</p>
<pre>
bzr init-repo ~/repos/nova
cd ~/repos/nova
bzr branch lp:nova trunk
bzr branch trunk bugXXXXX
mkdir -p ~/virtenvs/nova
</pre>
<p>At this point, we'll go ahead and create a virtual development environment for bugXXXXX:</p>
<pre>
cd ~/virtenvs/nova
virtualenv --no-site-packages bugXXXXX
cd bugXXXXX
source bin/activate
</pre>
<p>At this point, you'll notice your prompt change, indicating that you are now in a virtual development environment.  The <tt>--no-site-packages</tt> ensures that your locally-installed Python packages aren't included in your Python PATH when inside your virtual environment.</p>
<p>Next step is to install into this virtual development environment all the packages and dependencies we'll need.  This should do the trick:</p>
<pre>
easy_install twisted tornado boto M2Crypto IPy carrot mox redis
easy_install http://python-gflags.googlecode.com/files/python_gflags-1.3-py2.5.egg
</pre>
<p>Alright, next we simply link to our bzr branch location from inside the virtual environment and run the Nova test suite:</p>
<pre>
ln -s ~/repos/nova/bugXXXXX bugXXXXX
cd bugXXXXX
python run_tests.py
</pre>
<p>If all went smoothly, you'll see all passing test cases, like below <img src='http://www.joinfu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://joinfu.com/img/nova-test-screenshot.png" style="float: center; margin: 10px;" /></p>
<p>Having issues getting up and running?  Find us on Freenode IRC #openstack.</p>
<p>See ya,</p>
<p>Jay</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2010/07/developing-nova-on-linux-getting-started/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQL Stored Procedures Ain&#8217;t All That</title>
		<link>http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/</link>
		<comments>http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/#comments</comments>
		<pubDate>Thu, 13 May 2010 17:40:57 +0000</pubDate>
		<dc:creator>jaypipes</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.joinfu.com/?p=369</guid>
		<description><![CDATA[I give quite a lot of presentations. A whole lot less than I used to, but still quite a few per year. Most of the time, the presentations are on performance tuning MySQL. Almost every time I give a presentation on MySQL performance tuning &#8212; and this happens 100% of the time if I am [...]]]></description>
			<content:encoded><![CDATA[<p>I give quite a lot of presentations.  A whole lot less than I used to, but still quite a few per year.  Most of the time, the presentations are on performance tuning MySQL.</p>
<p>Almost every time I give a presentation on MySQL performance tuning &mdash; and this happens 100% of the time if I am presenting to a Windows SQL Server crowd &mdash; I get the following question:</p>
<blockquote><p>
Why don&#8217;t you cover using stored procedures in order to increase performance?  Wouldn&#8217;t that be the easiest way to get better performance since the stored procedures will only be parsed once and then the compiled bytecode would be efficiently executed from then on?
</p></blockquote>
<p>Every person that asks this question assumes something about MySQL&#8217;s stored procedure implementation; they incorrectly believe that <strong>stored procedures are compiled and stored in a global stored procedure cache</strong>, similar to the stored procedure cache in Microsoft SQL Server<sup>[1]</sup> or Oracle<sup>[2]</sup>.</p>
<p>This is wrong.  Flat-out incorrect.</p>
<p>Here is the truth: <strong>Every single connection</strong> to the MySQL server maintains it&#8217;s own stored procedure cache.</p>
<p>This means two very important things that users of stored procedures should understand:</p>
<ul>
<li>If you operate in a shared-nothing environment &mdash; for example, the majority of PHP and Python applications that do <em>not</em> use connection pooling or persistent connections &mdash; if your application uses stored procedures, the connection is compiling the stored procedure, storing it in a cache, and destroying that cache every single time you connect to the database server and issue a CALL statement</li>
<li>If you use stored procedures, the <strong>memory usage</strong> of every single connection that uses those stored procedures is going to increase, and will increase substantially if you use many stored procedures</li>
</ul>
<h2>Ooops, I Invalidated Everything Again</h2>
<p>So, what happens when you <tt>CREATE</tt>, <tt>ALTER</tt>, or <tt>DROP</tt> <em>any stored procedures</em>?  Since MySQL stores all stored procedure execution code on the connection threads, each of those connection threads must invalidate the procedure in its caches that has changed, right?</p>
<p>No, it&#8217;s worse.  Every time <strong>ANY</strong> stored procedure is added, dropped, or updated, <strong>ALL stored procedures on ALL connection threads will be invalidated and must be re-compiled</strong>.  Here is how the &#8220;caches&#8221; are invalidated:</p>
<p><strong>from <tt>/sql/sp_cache.cc</tt>, lines 193-197, in MySQL 5.5</strong></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
  Invalidate all routines in all caches.
&nbsp;
  SYNOPSIS
    sp_cache_invalidate()
&nbsp;
  NOTE
    This is called when a VIEW definition is created or modified (and in some
    other contexts). We can't destroy sp_head objects here as one may modify
    VIEW definitions from prelocking-free SPs.
*/</span>
<span style="color: #0000ff;">void</span> sp_cache_invalidate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  DBUG_PRINT<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;info&quot;</span>,<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;sp_cache: invalidating&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  thread_safe_increment<span style="color: #008000;">&#40;</span>Cversion, <span style="color: #000040;">&amp;</span>Cversion_lock<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>It&#8217;s a bit misleading, since it actually doesn&#8217;t invalidate anything at all.  What the above code does is increment the global &#8220;Cversion&#8221; variable.  When a connection thread attempts to execute, drop or insert a new procedure, it will notice that it&#8217;s local cache&#8217;s version number is less than this Cversion number and will destroy the entire cache and rebuild it gradually as procedures are affected or executed.</p>
<h2>So, Should You Use Stored Procedures in MySQL?</h2>
<p>The above warning doesn&#8217;t <em>necessarily</em> mean that you should <em>never</em> use stored procedures?  No.  What it means (besides being a bit of a rant on the implementation of MySQL&#8217;s stored procedures) is that you should be aware of these issues and use stored procedures where they make the most sense:</p>
<ul>
<li>When you <em>know</em> that you will be executing the stored procedure over and over again on the same connection &mdash; for instance, in a bulk loading script or similar</li>
<li>When you <em>know</em> that you will not be disconnecting from the MySQL server at the end of script execution &mdash; for instance, if you use JDBC connection pooling</li>
<li>When you <em>know</em> that you have a limited number of stored procedures and the memory usage of connections won&#8217;t be an issue</li>
</ul>
<p>Finally, if you see benchmarks that purport to show a huge performance increase from using stored procedures in MySQL, be careful to understand what the benchmark is doing and whether that benchmark represents <strong>your real-world environment</strong>.  For instance, if you see a huge performance increase in sysbench when using stored procedures, but you have a PHP shared-nothing environment, understand that those benchmark results mean very little to you, since sysbench connections don&#8217;t get destroyed until the end of the run&#8230;</p>
<p><sup>[1]</sup> From my copy of Inside SQL Server 2000, Delaney (2001), pages 852-865.  For a short, but decent, online explanation of SQL Server&#8217;s stored procedure cache, see <a href="http://www.databasejournal.com/features/mssql/article.php/3067071/SQL-Server-Stored-Procedures-Administration.htm">here</a></p>
<p><sup>[2]</sup> Oracle&#8217;s stored procedures are stored in the shared pool of the Oracle system global area (SGA)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

