For completeness purposes, here is the stack trace of the concurrent update exception as shown in the Zope 3 logs: 2009-01-30T17:29:31 ERROR SiteError http://localhost:8080/hardware/200712-203/index.html Traceback (most recent call last): File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/publisher/publish.py", line 136, in publish result = publication.callObject(request, obj) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/app/publication/zopepublication.py", line 167, in callObject return mapply(ob, request.getPositionalArguments(), request) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/publisher/publish.py", line 108, in mapply return debug_call(obj, args) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/publisher/publish.py", line 114, in debug_call return obj(*args) File "/srv/trunk.certification.canonical.com/certify-web/src/canonical/certify/browser/page.py", line 61, in __call__ result = provider.render() File "/srv/trunk.certification.canonical.com/certify-web/src/canonical/content/provider.py", line 55, in render return self.template(*args, **kwargs) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/app/pagetemplate/viewpagetemplatefile.py", line 83, in __call__ return self.im_func(im_self, *args, **kw) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/app/pagetemplate/viewpagetemplatefile.py", line 51, in __call__ sourceAnnotations=getattr(debug_flags, 'sourceAnnotations', 0), File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/pagetemplate/pagetemplate.py", line 115, in pt_render strictinsert=0, sourceAnnotations=sourceAnnotations)() File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 271, in __call__ self.interpret(self.program) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 346, in interpret handlers[opcode](self, args) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 536, in do_optTag_tal self.do_optTag(stuff) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 521, in do_optTag return self.no_tag(start, program) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 516, in no_tag self.interpret(program) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 346, in interpret handlers[opcode](self, args) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tal/talinterpreter.py", line 623, in do_insertText_tal text = self.engine.evaluateText(stuff[0]) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tales/tales.py", line 704, in evaluateText text = self.evaluate(expr) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tales/tales.py", line 696, in evaluate return expression(self) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tales/expressions.py", line 217, in __call__ return self._eval(econtext) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tales/expressions.py", line 194, in _eval ob = self._subexprs[-1](econtext) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/tales/expressions.py", line 124, in _eval ob = self._traverser(ob, element, econtext) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/app/pagetemplate/engine.py", line 68, in __call__ request=request) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/traversing/adapters.py", line 164, in traversePathElement return traversable.traverse(nm, further_path) File "/srv/trunk.certification.canonical.com/certify-zope3/src/zope/traversing/adapters.py", line 44, in traverse attr = getattr(subject, name, _marker) File "/srv/trunk.certification.canonical.com/certify-web/src/canonical/certify/browser/hardware.py", line 59, in title return "%s %s" % (self.context.record_type.name, File "/srv/trunk.certification.canonical.com/certify-storm/storm/references.py", line 154, in __get__ self._relation.get_local_variables(local)) File "/srv/trunk.certification.canonical.com/certify-storm/storm/store.py", line 157, in get self.flush() File "/srv/trunk.certification.canonical.com/certify-storm/storm/store.py", line 494, in flush self._flush_one(obj_info) File "/srv/trunk.certification.canonical.com/certify-storm/storm/store.py", line 556, in _flush_one self._connection.execute(expr, noresult=True) File "/srv/trunk.certification.canonical.com/certify-storm/storm/databases/postgres.py", line 263, in execute return Connection.execute(self, statement, params, noresult) File "/srv/trunk.certification.canonical.com/certify-storm/storm/database.py", line 203, in execute raw_cursor = self.raw_execute(statement, params) File "/srv/trunk.certification.canonical.com/certify-storm/storm/databases/postgres.py", line 293, in raw_execute return Connection.raw_execute(self, statement, params) File "/srv/trunk.certification.canonical.com/certify-storm/storm/database.py", line 284, in raw_execute self._check_disconnect(raw_cursor.execute, *args) File "/srv/trunk.certification.canonical.com/certify-storm/storm/database.py", line 325, in _check_disconnect return function(*args, **kwargs) ProgrammingError: could not serialize access due to concurrent update