<?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>Mozilla Web Development &#187; Breakpad</title>
	<atom:link href="http://blog.mozilla.com/webdev/category/breakpad/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mozilla.com/webdev</link>
	<description>Everybody Likes Ninjas</description>
	<lastBuildDate>Sat, 21 Nov 2009 05:50:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Three Weeks with the New Socorro File System</title>
		<link>http://blog.mozilla.com/webdev/2008/12/01/three-weeks-with-the-new-socorro-file-system/</link>
		<comments>http://blog.mozilla.com/webdev/2008/12/01/three-weeks-with-the-new-socorro-file-system/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 17:12:11 +0000</pubDate>
		<dc:creator>K Lars Lohn</dc:creator>
				<category><![CDATA[Breakpad]]></category>
		<category><![CDATA[Socorro]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/?p=107</guid>
		<description><![CDATA[Three weeks ago today, we deployed the new Socorro file system into production.  It was the first in in a series of engineered improvements to the Socorro codebase.  By “engineered”, I mean that it was the first major improvement to the code that wasn&#8217;t done during an emergency with a gun to our [...]]]></description>
			<content:encoded><![CDATA[<p>Three weeks ago today, we deployed the new Socorro file system into production.  It was the first in in a series of engineered improvements to the Socorro codebase.  By “engineered”, I mean that it was the first major improvement to the code that wasn&#8217;t done during an emergency with a gun to our heads.  For the previous half year, we&#8217;ve been reactive instead of proactive. </p>
<p>The new file system has performed quite well.  The most outward expression of this improvement is the speed at which priority jobs are processed.  </p>
<p>A priority job is any submitted crash for which someone has requested a report.  There can be a backlog of submitted crashes and it might take from several minutes to several hours for the processing programs to get around to a particular job.  If someone requests a particular crash, we&#8217;ve got a way for that job to jump the queue for immediate processing.   Prior to the new file system, the biggest hurdle to processing a job quickly was simply finding it.   There was no index to assist in find a job quickly.</p>
<p>The new file system changed that.  All entries are indexed as they&#8217;re inserted.  To see how it&#8217;s done, see my previous blog posting.  This gives us very fast access to any crash dump which translates to response times of thirty to ninety seconds for priority job requests.  Try it.  Considering the volume of crashes we get, it&#8217;s amazing that we can zero in and process a crash so quickly.</p>
<p>The last two weeks hasn&#8217;t all been champagne and fireworks.  We had a scare about forty eight hours after deployment.  The automatic indexing scheme uses a radix algorithm to spread crash dumps evenly through a branching file system structure.  During design, we chose to make this structure four levels deep.  Each level did a 256 way bifurcation of the directory tree.  That translates into 256^4 possible directories or about 4.3 billion.  Once a directory was created, we never retired it, thinking that it would be faster to reuse old directories than to bother destroying and creating them all the time.  At the rate that we received new files, we calculated that it would take years to clog up the file system.  We banked on the assumption that we had at least 4.3 billion inodes available in the file system.</p>
<p>It was a bad assumption.  It turns out that we&#8217;re using some sort of  black box storage systems with variable sized inodes.  We didn&#8217;t have 4.3G inodes available, we had only 64M. Back into reactive coding as performance art, we took twenty four hours to brainstorm, code, and deploy a solution.  Changing the number of levels from four to three was an obvious way to reduce our foot print: 256^3 is only 16M.  The number of levels of our radix directory structure is now a configuration option.  The trick was making four days of data stored with four levels compatible with new data being collected with fewer levels.  I managed that by encoding the number of levels into uuid of each crash.</p>
<p>Next time you see a crash uuid, take a look at the digits.  The seventh digit from the right end will tell you how deep your crash is stored in the file system.  If it&#8217;s &#8216;0&#8242; then you&#8217;re stored four levels deep.  Any other digit is to be taken literally: &#8216;2&#8242; – two levels, &#8216;3&#8242; – three levels.  This  crazy scheme lets the depth be switchable at run time.  If directories are getting too crowded, we can raise the depth.  Of it we start getting running out of inodes, we can lower the depth.</p>
<p>Great thanks to Frank Griswold for the coding and to Aravind for not throwing knives at me.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/12/01/three-weeks-with-the-new-socorro-file-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Socorro&#8217;s File System Storage</title>
		<link>http://blog.mozilla.com/webdev/2008/10/10/socorros-file-system-storage/</link>
		<comments>http://blog.mozilla.com/webdev/2008/10/10/socorros-file-system-storage/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 20:49:19 +0000</pubDate>
		<dc:creator>K Lars Lohn</dc:creator>
				<category><![CDATA[Breakpad]]></category>
		<category><![CDATA[Socorro]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/?p=83</guid>
		<description><![CDATA[As the scope and depth of the Socorro/Breakpad project has evolved in the last nine months, the most nonvolatile requirement of the project has been a file system as the initial server side storage for submitted crash dumps.  The file system gets used as an ad hoc hierarchical database, but it isn&#8217;t optimized for [...]]]></description>
			<content:encoded><![CDATA[<p>As the scope and depth of the Socorro/Breakpad project has evolved in the last nine months, the most nonvolatile requirement of the project has been a file system as the initial server side storage for submitted crash dumps.  The file system gets used as an ad hoc hierarchical database, but it isn&#8217;t optimized for the type of lookups that we need to do. Unfortunately, the original implementation was without indexing by name leaving us using a search (sort of like using <code>find</code> over NFS with 9 million entries).  We patched and then patched the patches as the magnitude of our scaling problem erupted in front of us.  Now that the emergencies are over and server side throttling is in place, we can revisit and re-engineer a proper interface for the file system.</p>
<p>Indexing by a single key is simple in a file system.  The path is the key to a file.  Indexing by a second key in a file system requires links.  We chose to use symbolic links as our pointers to indicate relationships between files.  There&#8217;s an interesting thing about symbolic links: if the path they point to isn&#8217;t too long, the path is stored right with the inode.  Reading the target path from a symbolic link is fast.  We created two radix sort hierarchies, one for the name and one for date.  We store our uuid named data files on the name branch.  Then we have symbolic links span the gap between the branches to indicate the time interval in which a file was submitted.</p>
<p><img src="http://socorro.googlecode.com/files/Socorro.directory.diagram.2.2.png" alt="the New Socorro File System Layout" /></p>
<p>Our applications use these two hierarchies in a certain order every time. On first reading the file system, we&#8217;re looking only for dumps that we haven&#8217;t seen before.  We walk the hierarchy on the date side and we know that every symbolic link we encounter represents a new crash dump.  We pass the uuid on to the next application for processing and then we remove the symbolic links.  That guarantees that any link we find on the date side is always new.  From then on, we only will need to lookup that uuid by name.  The remaining hierarchy of the name branch is optimized for that.  </p>
<p>We also use this hierarchy for long term storage of crash dumps using a different file system root.  Using the name branch, we can look up files by uuid very quickly even if the number of stored files is huge.  When it&#8217;s time to retire old data that is no longer needed, we can walk the date branch to find and delete only items older than a threshold.</p>
<p>We expect this new system to speed up priority processing significantly.  The uniform API embodied by our new class JsonDumpStorage will increase reliability and consistency across the applications that use the file system.</p>
<p>For more information, see: <a href="http://code.google.com/p/socorro/wiki/SocorroFileSystem">SocorroFileSystem</a><br />
For progress information on deployment: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=458798">Bug 458798</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/10/10/socorros-file-system-storage/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Socorro Delays</title>
		<link>http://blog.mozilla.com/webdev/2008/07/07/socorro-delays/</link>
		<comments>http://blog.mozilla.com/webdev/2008/07/07/socorro-delays/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 19:16:26 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/?p=69</guid>
		<description><![CDATA[Over the last week, we&#8217;ve encountered some problems in our monitor and processor caused by a large number of pending jobs:

main monitor thread takes &#62; 1 hr to complete a full scan of pending jobs on disk
priority job processing depends on this thread

In order to fix these delays, we have made priority job monitoring a [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last week, we&#8217;ve encountered some problems in our monitor and processor caused by a large number of pending jobs:</p>
<ul>
<li>main monitor thread takes &gt; 1 hr to complete a full scan of pending jobs on disk</li>
<li>priority job processing depends on this thread</li>
</ul>
<p>In order to fix these delays, we have made priority job monitoring a separate thread from the main queue thread, but we are working to reduce the delay back to 1-2 minutes (which is what we&#8217;re used to!).</p>
<p>Currently, we are blocked by issues with this new method related to filesystem scanning.  This is blocking the <a href="http://blog.mozilla.com/webdev/2008/06/23/socorro-database-updates/">archiving and data re-import mentioned in our last set up updates</a>.  <a href="http://code.google.com/p/socorro/source/browse/trunk/socorro/monitor/monitor.py">See the related code</a>.</p>
<p>We are working to fix this asap, and will provide updates this evening.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/07/07/socorro-delays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Socorro Database Updates</title>
		<link>http://blog.mozilla.com/webdev/2008/06/23/socorro-database-updates/</link>
		<comments>http://blog.mozilla.com/webdev/2008/06/23/socorro-database-updates/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 00:50:19 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/?p=68</guid>
		<description><![CDATA[The Socorro database, which is the main database for Firefox 3 crashes, will be going through some maintenance upgrades this week.  Starting tonight, this means:

Report data prior to June 23rd will be temporarily unavailable.
New reports will work as usual on our new database.
Old data will be imported into the new database using an improved [...]]]></description>
			<content:encoded><![CDATA[<p>The Socorro database, which is the main database for Firefox 3 crashes, will be going through some maintenance upgrades this week.  Starting tonight, this means:</p>
<ul>
<li>Report data prior to June 23rd will be temporarily unavailable.</li>
<li>New reports will work as usual on our new database.</li>
<li>Old data will be imported into the new database using an improved partitioning plan.</li>
</ul>
<p>Reasons why we need to do this now:</p>
<ul>
<li>Firefox 3 crash throughput has been about triple the projected amount (due to the popularity of Firefox 3).</li>
<li>The current database has a partition that is unmanageable without significant downtime (2-3 days)</li>
<li>The Socorro reporter is not responsive because of the size of the current partition.</li>
</ul>
<p>No individual reports will be lost, they will be restored over the next week.  Please let us know if you have any questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/06/23/socorro-database-updates/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Socorro Processor Updates</title>
		<link>http://blog.mozilla.com/webdev/2008/04/21/socorro-processor-updates/</link>
		<comments>http://blog.mozilla.com/webdev/2008/04/21/socorro-processor-updates/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 18:29:55 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>
		<category><![CDATA[Socorro]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/2008/04/21/socorro-processor-updates/</guid>
		<description><![CDATA[Last Friday we pushed some important updates to Socorro:

Bug 426940 &#8211; Reduce or eliminate delay in collector to monitor hand-off
Bug 426940 &#8211; Fix processor handling of error conditions
Bug 428300 &#8211; status page too slow

This means:

When you submit a crash report you won&#8217;t have to wait longer than 30-60 seconds to view your report
The processor now [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday we pushed <a href="http://tinyurl.com/3rymbx">some important updates</a> to Socorro:</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=426940">Bug 426940</a> &#8211; Reduce or eliminate delay in collector to monitor hand-off</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=411391">Bug 426940</a> &#8211; Fix processor handling of error conditions</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=428300">Bug 428300</a> &#8211; status page too slow</li>
</ul>
<p>This means:</p>
<ul>
<li>When you submit a crash report you won&#8217;t have to wait longer than 30-60 seconds to view your report</li>
<li>The processor now has better handling of minidump_stackwalk fatal errors</li>
<li>There is an improved <a href="http://crash-stats.mozilla.com/status">server status page</a> where you can view stats on the current queue</li>
</ul>
<p>Thanks to Lars and Aravind for getting this out the door.  The next couple of weeks will be spent improving reporter performance and closing out <a href="http://tinyurl.com/4flnna">milestone 0.5</a> bugs.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/04/21/socorro-processor-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crash Analysis: now in Open Source flavor</title>
		<link>http://blog.mozilla.com/webdev/2008/04/21/crash-analysis-now-in-open-source-flavor/</link>
		<comments>http://blog.mozilla.com/webdev/2008/04/21/crash-analysis-now-in-open-source-flavor/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 17:37:41 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>
		<category><![CDATA[Socorro]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/2008/04/21/crash-analysis-now-in-open-source-flavor/</guid>
		<description><![CDATA[History can tell you that companies don&#8217;t disclose crashes in their software.  They keep a pretty close eye on what crashes and bugs are disclosed.
Mozilla doesn&#8217;t.
Rather than being the exception, openness is the rule, and that is one of the coolest things about being a part of this.  My job, my everday tasks, [...]]]></description>
			<content:encoded><![CDATA[<p>History can tell you that companies don&#8217;t disclose crashes in their software.  They keep a pretty close eye on what crashes and bugs are disclosed.</p>
<p>Mozilla doesn&#8217;t.</p>
<p>Rather than being the exception, openness is the rule, and that is one of the coolest things about being a part of this.  My job, my everday tasks, they aren&#8217;t secret, and they are not to drive profits.  They are to drive the web.</p>
<p><img src="http://people.mozilla.org/~morgamic/bp.jpg" alt="soccorro screenshot" align="right" height="164" hspace="10" vspace="10" width="250" /></p>
<p>In that spirit, <a href="http://crash-stats.mozilla.com/">our crash reporting system</a> (<a href="http://code.google.com/p/socorro/">Socorro</a>) is available to whoever wants to view it.  Aside from user-bound statistics, crash information is available in full and anybody in the community can learn about where in the code their client crashed.  They can also help provide hints or comments about what they were doing at the time they crashed.</p>
<p>This opens the door for the community to learn valuable things about their software and how they use it:</p>
<ul>
<li><strong>What crashes the most?</strong>  What crashes the most over time?  What is the breakdown across branches, versions and products?</li>
<li><strong>Where did we crash?</strong>  Crash signatures provide a head start for locating the cause for a crash.  From there, full stack traces are available to analyze callback and find the source of the actual crash.</li>
<li><strong>What was installed?</strong>  What modules were installed for a given crash?  Soon we will also be able to understand what extensions were installed so we can understand the correlation between core client crashes and crashes caused by faulty extensions.  The end result is a closer relationship with the extension developer community and better quality in our add-ons space.</li>
<li><strong>How are we doing?</strong> Overall the jackpot question is &#8212; are we crashing more or less?  How are we doing with this beta, alpha or rc1?  Are we regressing in real-life situations despite positive automated testing results??</li>
</ul>
<p>All of this was possible because of a collaborative effort between quite a few parties:</p>
<ul>
<li>Mark Mentovai and the <a href="http://code.google.com/p/google-breakpad/">breakpad</a> team, for writing a great client and processor under a flexible open source license that is easy to integrate</li>
<li>Ted Mielczarek for his work on the client, processor and integrating the project into Firefox 3</li>
<li>Benjamin Smedberg and Robert Sayre for their work in getting the initial versions of the breakpad server off the ground</li>
</ul>
<p>Where do we go from here?</p>
<ul>
<li><a href="http://wiki.mozilla.org/Breakpad">Learn more about the project</a></li>
<li><a href="https://bugzilla.mozilla.org/enter_bug.cgi?alias=&amp;assigned_to=nobody%40mozilla.org&amp;blocked=&amp;bug_file_loc=http%3A%2F%2F&amp;bug_severity=normal&amp;bug_status=NEW&amp;comment=&amp;component=Socorro&amp;contenttypeentry=&amp;contenttypemethod=autodetect&amp;contenttypeselection=text%2Fplain&amp;data=&amp;dependson=&amp;description=&amp;flag_type-385=X&amp;flag_type-387=X&amp;flag_type-391=X&amp;flag_type-394=X&amp;flag_type-395=X&amp;flag_type-4=X&amp;form_name=enter_bug&amp;keywords=&amp;maketemplate=Remember%20values%20as%20bookmarkable%20template&amp;op_sys=All&amp;priority=--&amp;product=Webtools&amp;qa_contact=socorro%40webtools.bugs&amp;rep_platform=All&amp;short_desc=&amp;target_milestone=---&amp;version=Trunk">Send in your ideas</a></li>
</ul>
<p>Of the many projects we have in 2008, this is one of the most exciting.  It&#8217;s an opportunity to open up information that hasn&#8217;t historically been available to the masses, and hack on a great tool for improving the quality of all Mozilla projects</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/04/21/crash-analysis-now-in-open-source-flavor/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Socorro Updates</title>
		<link>http://blog.mozilla.com/webdev/2008/04/04/socorro-updates-2/</link>
		<comments>http://blog.mozilla.com/webdev/2008/04/04/socorro-updates-2/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 23:45:39 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/2008/04/04/socorro-updates-2/</guid>
		<description><![CDATA[ We&#8217;ve pushed some important updates in the last couple of days:

refactor of processor code, which is 1/3 of the breakpad server
architecture
update of reporter to allow for instant queuing of requested reports

This means:

If you submit a crash, going to that crash page will:

Show you a &#8220;haven&#8217;t queued it yet&#8221; page instead of a 404
page that [...]]]></description>
			<content:encoded><![CDATA[<p> We&#8217;ve pushed some important updates in the last couple of days:</p>
<ul>
<li>refactor of processor code, which is 1/3 of the breakpad server<br />
architecture</li>
<li>update of reporter to allow for instant queuing of requested reports</li>
</ul>
<p>This means:</p>
<ul>
<li>If you submit a crash, going to that crash page will:
<ul>
<li>Show you a &#8220;haven&#8217;t queued it yet&#8221; page instead of a 404<br />
page that will update in &lt; 10 min</li>
<li>Once queued, you&#8217;ll see a &#8220;report pending&#8221; page that will<br />
redirect to the finished report in &lt; 21 seconds</li>
</ul>
</li>
<li>Wait time for reports from testers is reduced to 10 min max,<br />
sometimes 21 seconds best-case</li>
<li>We are working on eliminating the 10 min portion but there are<br />
reasons why we can&#8217;t spam the monitor that is responsible for<br />
queuing new reports that are on disk &#8212; more on that next week (I<br />
want this to get down to: load, wait 20 seconds, BAM! see your report)</li>
</ul>
<p>Thanks for everyone&#8217;s patience with the crash report backlog during releases &#8212; we hope this helps many of you.</p>
<p>Let me know if you have any questions.  More to come in the next few weeks!  Thanks to Lars, Ted and Aravind for their help with developing/ testing and pushing these updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2008/04/04/socorro-updates-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Socorro Updates</title>
		<link>http://blog.mozilla.com/webdev/2007/07/31/socorro-updates/</link>
		<comments>http://blog.mozilla.com/webdev/2007/07/31/socorro-updates/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 20:23:37 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>
		<category><![CDATA[Socorro]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/2007/07/31/socorro-updates/</guid>
		<description><![CDATA[Socorro has had a few improvements over the last week.  bsmedberg, ispiked and luser worked hard to bring you:

Graphs to show crash population over time
Crash reports by operating system
Crash reports by build and operating system

There are plenty of fun graphs that show trends over time.  For example, see this graph that shows a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://crash-stats.mozilla.com/">Socorro</a> has had a few improvements over the last week.  bsmedberg, ispiked and luser worked hard to bring you:</p>
<ul>
<li>Graphs to show crash population over time</li>
<li>Crash reports by operating system</li>
<li>Crash reports by build and operating system</li>
</ul>
<p>There are <a href="http://crash-stats.mozilla.com/report/list?range_unit=weeks&amp;branch=1.9&amp;range_value=2&amp;signature=gfxFont%3A%3ADraw%28gfxTextRun+%2A%2Cunsigned+int%2Cunsigned+int%2CgfxContext+%2A%2Cint%2CgfxPoint+%2A%2CgfxFont%3A%3ASpacing+%2A%29">plenty</a> of <a href="http://crash-stats.mozilla.com/report/list?range_unit=weeks&amp;branch=1.9&amp;range_value=2&amp;signature=NSSRWLock_LockRead">fun</a> <a href="http://crash-stats.mozilla.com/report/list?range_unit=weeks&amp;query_search=signature&amp;query_type=contains&amp;product=Firefox&amp;platform=windows%2Cmac%2Clinux&amp;version=Firefox%3A3.0a7pre&amp;branch=1.9&amp;signature=%400x20&amp;range_value=1">graphs</a> that show trends over time.  For example, see this graph that shows a common crash in gfxFont::Draw:</p>
<p><img src="http://people.mozilla.com/~morgamic/crash-graph.jpg" alt="Draw" align="middle" height="165" width="486" /></p>
<p>Up next, we&#8217;ll be working on finishing up milestone 2 items and work towards milestone 3.  For more about the project and what we&#8217;re working on:</p>
<ul>
<li>See the <a href="http://code.google.com/p/socorro/">project home page</a></li>
<li><a href="http://code.google.com/p/socorro/issues/list?q=label:Milestone-2">List of current to-dos</a> (milestone 2)</li>
<li><a href="http://code.google.com/p/socorro/issues/list">All open issues</a></li>
<li><a href="http://wiki.mozilla.org/Breakpad">Our wiki page discussing requirements and design</a></li>
</ul>
<p>If you have any comments please find us in <a href="http://groups.google.com/group/mozilla.dev.quality/topics">mozilla.dev.quality</a> or #breakpad@irc.mozilla.org on IRC!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2007/07/31/socorro-updates/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Partitioning Fun in PostgreSQL</title>
		<link>http://blog.mozilla.com/webdev/2007/05/15/partitioning-fun-in-postgresql/</link>
		<comments>http://blog.mozilla.com/webdev/2007/05/15/partitioning-fun-in-postgresql/#comments</comments>
		<pubDate>Wed, 16 May 2007 07:43:15 +0000</pubDate>
		<dc:creator>morgamic</dc:creator>
				<category><![CDATA[Breakpad]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/webdev/2007/05/15/partitioning-fun-in-postgresql/</guid>
		<description><![CDATA[Last week I learned a few things (the hard way) about PostgreSQL (pgsql) partitioning:

You really have to read the &#8220;caveats&#8221; part of the manual (scroll down, very bottom)
Server config matters (SET constraint_exclusion = on;) if you want to avoid unnecessarily checking out-of-bounds partitions
Child tables don&#8217;t inherit permissions, so owning the parent table won&#8217;t automagically grant [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I learned a few things (the hard way) about PostgreSQL (pgsql) partitioning:</p>
<ul>
<li>You really have to <a href="http://www.postgresql.org/docs/8.1/static/ddl-partitioning.html#DDL-PARTITIONING-CONSTRAINT-EXCLUSION">read the &#8220;caveats&#8221; part of the manual</a> (scroll down, very bottom)</li>
<li>Server config matters (<kbd>SET constraint_exclusion = on;</kbd>) if you want to avoid unnecessarily checking out-of-bounds partitions</li>
<li>Child tables don&#8217;t inherit permissions, so owning the parent table won&#8217;t automagically grant you access to child tables &#8212; which in this case prevented me from setting up my explicit indexes.</li>
<li>Foreign key constraints on a parent table are not inherited.    This is actually a bug in pgsql.  They <a href="http://developer.postgresql.org/index.php/Todo:WishlistFor83#likely">plan on changing &#8220;CREATE TABLE LIKE&#8221;  in pgsql 8.3</a> but fixing this for INHERIT statements is a bit different since it means inheriting for the lifetime of the parent-&gt;child relationship (instead of one-time-only during creation).  For more, read <a href="http://archives.postgresql.org/pgsql-patches/2007-03/msg00120.php">chizu&#8217;s thread on the issue</a> &#8212; he actually submitted a patch that fixed things for table creation.  <img src='http://blog.mozilla.com/webdev/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Long story short, partitioning is tricky business.  For more, see <a href="http://benjamin.smedbergs.us/blog/2007-05-12/when-partitioning-database-tables-explain-your-queries/">bsmedberg&#8217;s blog</a>, where he talks about query performance in queries spanning multiple partitions and his battle with the postgresql query planner.</p>
<p>From the very beginning, even before you start messing with the query planner, I think it&#8217;s important to understand the pitfalls of inheritance in pgsql and how it will affect your use of partitions.</p>
<p>So just be extra careful when you read the manual and make sure you&#8217;re aware of these issues when you plan your schema.  If you&#8217;re not, it&#8217;ll come back to bite you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/webdev/2007/05/15/partitioning-fun-in-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
