On Tue, May 20, 2008 at 8:30 PM, Rob Miller <ra@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@gmail.com <mailto:sasha.vincic@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@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 )