[Zope-dev] Re: Five registerPackage results in unresolved ConflictError

Sasha Vincic sasha.vincic at gmail.com
Wed May 21 06:47:58 EDT 2008


On Tue, May 20, 2008 at 8:30 PM, Rob Miller <ra at burningman.com> wrote:

> 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.
>>
>
This seams to work when you start instances without debug, which production
is but it still fails the same way with debug on.


>
> 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)
>

So you run ./zopectl run do_nothing.py before you started each instance? Is
that better then my doInstall() check?

/Sasha


>
> 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" />
>>>
>>>
> _______________________________________________
> Zope-Dev maillist  -  Zope-Dev at zope.org
> http://mail.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope-dev/attachments/20080521/573bcb66/attachment-0001.html


More information about the Zope-Dev mailing list