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

Philipp von Weitershausen philipp at weitershausen.de
Tue May 20 13:25:00 EDT 2008


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.


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



More information about the Zope-Dev mailing list