Hi<div><br></div><div>On a server we have a ZEO server with 6 clients. When we start/restart the server we often get on random instance an AttributeError @@plone and all other browser pages. I have tracked it down to a ConflictError when installing Five on startup. See traceback bellow. To solve this I tried to set enable-product-installation = off to all except one instance but I still got errors.</div>
<div>For now we restart the broken instances until they work, I have tried to set sleeping times up to couple seconds between the instances but it didn't make any difference.<br></div><div><br></div><div>Five fails when it tries to execute the registerPackage in zcml files. Not the same product every time.</div>
<div>First I thought it didn't respect the enable-product-instalation but that is checked in App.Product.initializeProduct method. </div><div>So I played in fiveconfigure.py with transaction.savepoint() but no success but if I manually check App.Product.doInstall like in the diff below </div>
<div><br></div><div>Now my question is if this is correct solution for the problem or will it have other side effects that I am not aware of? How do I write tests for an ConflicError during startup?</div><div><br></div><div>
/Sasha</div><div><br></div><div>Index: fiveconfigure.py </div>
<div>=================================================================== </div><div>--- fiveconfigure.py (revision 86781) <br>
</div><div><div>+++ fiveconfigure.py (working copy) </div>
<div>@@ -23,7 +23,7 @@ </div><div> import warnings </div>
<div> </div><div> import App.config </div>
<div>-from App.Product import initializeProduct </div><div>+from App.Product import initializeProduct, doInstall </div>
<div> from App.ProductContext import ProductContext </div><div> import Products </div>
<div> from zLOG import LOG, ERROR </div><div>@@ -265,6 +265,8 @@ </div>
<div> if not hasattr(module_, '__path__'): </div><div>
raise ValueError("Must be a package and the " \ </div><div>
"package must be filesystem based") </div><div>
+ if not doInstall(): </div><div>+ return </div>
<div> </div><div> app = Zope2.app() </div>
<div> try: </div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><div><div>2008-05-16 11:48:17 ERROR Zope Couldn't install Five</div><div>Traceback (most recent call last):</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py", line 783, in install_product</div>
<div> initmethod(context)</div><div> File "/Users/sasha/Development/eea-buildout-clean/products/Five/__init__.py", line 31, in initialize</div><div> zcml.load_site()</div><div> File "/Users/sasha/Development/eea-buildout-clean/products/Five/zcml.py", line 41, in load_site</div>
<div> _context = xmlconfig.file(file)</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/xmlconfig.py", line 560, in file</div><div> context.execute_actions()</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/config.py", line 612, in execute_actions</div><div> callable(*args, **kw)</div><div> File "/Users/sasha/Development/eea-buildout-clean/products/Five/fiveconfigure.py", line 285, in _registerPackage</div>
<div> transaction.commit()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_manager.py", line 96, in commit</div><div> return self.get().commit(sub, deprecation_wng=False)</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py", line 380, in commit</div><div> self._saveCommitishError() # This raises!</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py", line 378, in commit</div>
<div> self._commitResources()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py", line 433, in _commitResources</div><div> rm.commit(self)</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py", line 484, in commit</div><div> self._commit(transaction)</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py", line 518, in _commit</div>
<div> raise ConflictError(object=obj)</div><div>ConfigurationExecutionError: ZODB.POSException.ConflictError: database conflict error (oid 0x28f61f, class App.Product.Product)</div><div> in:</div><div> File "/Users/sasha/Development/eea-buildout-clean/src/plone.session/plone/session/configure.zcml", line 5.4-5.65</div>
<div> <five:registerPackage package="." initialize=".initialize" /></div><div><br></div><div>Traceback (most recent call last):</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/run.py", line 56, in ?</div>
<div> run()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/run.py", line 21, in run</div><div> starter.prepare()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/__init__.py", line 98, in prepare</div>
<div> self.startZope()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/__init__.py", line 257, in startZope</div><div> Zope2.startup()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/__init__.py", line 47, in startup</div>
<div> _startup()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/App/startup.py", line 103, in startup</div><div> OFS.Application.initialize(application)</div><div>
File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py", line 304, in initialize</div><div> initializer.initialize()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py", line 333, in initialize</div>
<div> self.install_products()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py", line 605, in install_products</div><div> return install_products(app)</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py", line 636, in install_products</div><div> folder_permissions, raise_exc=debug_mode)</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py", line 783, in install_product</div>
<div> initmethod(context)</div><div> File "/Users/sasha/Development/eea-buildout-clean/products/Five/__init__.py", line 31, in initialize</div><div> zcml.load_site()</div><div> File "/Users/sasha/Development/eea-buildout-clean/products/Five/zcml.py", line 41, in load_site</div>
<div> _context = xmlconfig.file(file)</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/xmlconfig.py", line 560, in file</div><div> context.execute_actions()</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/config.py", line 612, in execute_actions</div><div> callable(*args, **kw)</div><div> File "/Users/sasha/Development/eea-buildout-clean/products/Five/fiveconfigure.py", line 285, in _registerPackage</div>
<div> transaction.commit()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_manager.py", line 96, in commit</div><div> return self.get().commit(sub, deprecation_wng=False)</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py", line 380, in commit</div><div> self._saveCommitishError() # This raises!</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py", line 378, in commit</div>
<div> self._commitResources()</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py", line 433, in _commitResources</div><div> rm.commit(self)</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py", line 484, in commit</div><div> self._commit(transaction)</div><div> File "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py", line 518, in _commit</div>
<div> raise ConflictError(object=obj)</div><div>zope.configuration.config.ConfigurationExecutionError: ZODB.POSException.ConflictError: database conflict error (oid 0x28f61f, class App.Product.Product)</div><div> in:</div>
<div> File "/Users/sasha/Development/eea-buildout-clean/src/plone.session/plone/session/configure.zcml", line 5.4-5.65</div><div> <five:registerPackage package="." initialize=".initialize" /></div>
<div><br></div></div><div><br></div></div><div><div><br></div></div>