[Zope-dev] Re: Five registerPackage results in unresolved
ConflictError
Rob Miller
ra at burningman.com
Tue May 20 14:30:27 EDT 2008
Philipp von Weitershausen wrote:
> Believe something very very rotten in Five's registerPackage was fixed
> by Rocky in r72986 [1]. As far as I can tell this was never merged to
> the 1.4 branch, but I could we wrong.
i can confirm that this seems to be helping. there's an easier way to
generate the error that Sasha is seeing... you can reliably reproduce it on
Zope 2.9.x w/ Five 1.4 just by starting a zeo server with no Data.fs file, and
then trying to connect with a zeo client. if you have any
<five:registerPackage> tags, the first connection will _always_ fail with a
ConflictError. subsequent connections will work, but the initial one will
fail. (we've had to put a './zopectl run do_nothing.py' steps into our build
code... :-P)
anyway, the error is not happening with Zope 2.10 and Five 1.5.6. glad to
know it's been resolved. :-)
-r
> [1] http://svn.zope.org/?rev=72986&view=rev
>
>
> Sasha Vincic wrote:
>> Forgot to say that this is Zope 2.9.8, Five 1.4 branch from svn, Plone
>> 2.5.5
>>
>> /Sasha
>>
>> On Fri, May 16, 2008 at 12:03 PM, Sasha Vincic <sasha.vincic at gmail.com
>> <mailto:sasha.vincic at gmail.com>> wrote:
>>
>> Hi
>>
>> 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.
>> 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.
>>
>> Five fails when it tries to execute the registerPackage in zcml
>> files. Not the same product every time.
>> First I thought it didn't respect the enable-product-instalation but
>> that is checked in App.Product.initializeProduct method. 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
>> 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?
>>
>> /Sasha
>>
>> Index: fiveconfigure.py
>>
>>
>> ===================================================================
>>
>>
>> --- fiveconfigure.py (revision
>> 86781)
>>
>>
>> +++ fiveconfigure.py (working
>> copy)
>>
>>
>> @@ -23,7 +23,7 @@
>>
>>
>> import
>> warnings
>>
>>
>>
>>
>>
>> import
>> App.config
>>
>>
>> -from App.Product import
>> initializeProduct
>>
>>
>> +from App.Product import initializeProduct, doInstall
>>
>>
>> from App.ProductContext import
>> ProductContext
>>
>>
>> import
>> Products
>>
>>
>> from zLOG import LOG,
>> ERROR
>>
>>
>> @@ -265,6 +265,8 @@
>>
>>
>> if not hasattr(module_, '__path__'):
>>
>>
>> raise ValueError("Must be a package and the "
>> \
>>
>>
>> "package must be filesystem based")
>>
>>
>> + if not
>> doInstall():
>>
>>
>> + return
>>
>>
>>
>>
>>
>> app =
>> Zope2.app()
>>
>>
>> try:
>>
>>
>>
>> 2008-05-16 11:48:17 ERROR Zope Couldn't install Five
>> Traceback (most recent call last):
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py",
>>
>> line 783, in install_product
>> initmethod(context)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/products/Five/__init__.py",
>> line 31, in initialize
>> zcml.load_site()
>> File
>> "/Users/sasha/Development/eea-buildout-clean/products/Five/zcml.py",
>> line 41, in load_site
>> _context = xmlconfig.file(file)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/xmlconfig.py",
>>
>> line 560, in file
>> context.execute_actions()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/config.py",
>>
>> line 612, in execute_actions
>> callable(*args, **kw)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/products/Five/fiveconfigure.py",
>>
>> line 285, in _registerPackage
>> transaction.commit()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_manager.py",
>>
>> line 96, in commit
>> return self.get().commit(sub, deprecation_wng=False)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py",
>>
>> line 380, in commit
>> self._saveCommitishError() # This raises!
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py",
>>
>> line 378, in commit
>> self._commitResources()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py",
>>
>> line 433, in _commitResources
>> rm.commit(self)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py",
>>
>> line 484, in commit
>> self._commit(transaction)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py",
>>
>> line 518, in _commit
>> raise ConflictError(object=obj)
>> ConfigurationExecutionError: ZODB.POSException.ConflictError:
>> database conflict error (oid 0x28f61f, class App.Product.Product)
>> in:
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/src/plone.session/plone/session/configure.zcml",
>>
>> line 5.4-5.65
>> <five:registerPackage package="." initialize=".initialize" />
>>
>> Traceback (most recent call last):
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/run.py",
>>
>> line 56, in ?
>> run()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/run.py",
>>
>> line 21, in run
>> starter.prepare()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/__init__.py",
>>
>> line 98, in prepare
>> self.startZope()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/Startup/__init__.py",
>>
>> line 257, in startZope
>> Zope2.startup()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/__init__.py",
>>
>> line 47, in startup
>> _startup()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/Zope2/App/startup.py",
>>
>> line 103, in startup
>> OFS.Application.initialize(application)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py",
>>
>> line 304, in initialize
>> initializer.initialize()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py",
>>
>> line 333, in initialize
>> self.install_products()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py",
>>
>> line 605, in install_products
>> return install_products(app)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py",
>>
>> line 636, in install_products
>> folder_permissions, raise_exc=debug_mode)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/OFS/Application.py",
>>
>> line 783, in install_product
>> initmethod(context)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/products/Five/__init__.py",
>> line 31, in initialize
>> zcml.load_site()
>> File
>> "/Users/sasha/Development/eea-buildout-clean/products/Five/zcml.py",
>> line 41, in load_site
>> _context = xmlconfig.file(file)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/xmlconfig.py",
>>
>> line 560, in file
>> context.execute_actions()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/zope/configuration/config.py",
>>
>> line 612, in execute_actions
>> callable(*args, **kw)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/products/Five/fiveconfigure.py",
>>
>> line 285, in _registerPackage
>> transaction.commit()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_manager.py",
>>
>> line 96, in commit
>> return self.get().commit(sub, deprecation_wng=False)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py",
>>
>> line 380, in commit
>> self._saveCommitishError() # This raises!
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py",
>>
>> line 378, in commit
>> self._commitResources()
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/transaction/_transaction.py",
>>
>> line 433, in _commitResources
>> rm.commit(self)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py",
>>
>> line 484, in commit
>> self._commit(transaction)
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/parts/zope2/lib/python/ZODB/Connection.py",
>>
>> line 518, in _commit
>> raise ConflictError(object=obj)
>> zope.configuration.config.ConfigurationExecutionError:
>> ZODB.POSException.ConflictError: database conflict error (oid
>> 0x28f61f, class App.Product.Product)
>> in:
>> File
>>
>> "/Users/sasha/Development/eea-buildout-clean/src/plone.session/plone/session/configure.zcml",
>>
>> line 5.4-5.65
>> <five:registerPackage package="." initialize=".initialize" />
>>
More information about the Zope-Dev
mailing list