Re: [ZODB-Dev] Problems when Conflict Resolution import code that try to open client storage

2005-09-22 Thread Paolo Linux

Tim Peters wrote:


I had zodb hanging when It had to solve Conflict situations. It turned
out to be that it tried to import some modules that tried to instantiate
ClientStorage...


... cut ...


Just a small suggestion. Is there any way to catch this problem and
issue a specific Execption rather that letting zeo hanging?



I expect you'll discover the difficulties if you try to define _precisely_
what this problem is.  How is the ZEO client connection code supposed to
guess that, despite that you asked to connect to a ZEO server, you didn't
really mean it ;-) ?


Is there any use case for this scenario? clonflict resolution calling
code that need to open another connection to the same db?

In fact it was zeo server code looping using 100% CPU... probably
there is the place where to check...


Extreme answers like well, it could examine the call stack and see whether
conflict resolution invoked this code, and then guess that, if it is, the
code didn't really mean to connect to ZEO don't make much sense.


If the problem statement is correct, available solutions can be 
analyzed... I don't see any reason for zeo server needing to open

client connection to itself...

But... this is seem an academic discussion and nothing that
really deserves time...

When you are inexperienced and come from 2 debugging days, it's 
difficult to be lucid enough to do smart posts ;-)


Ciao!!!
Pao
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev


Re: [ZODB-Dev] Problems when Conflict Resolution import code that try to open client storage

2005-09-21 Thread Dieter Maurer
Paolo Linux wrote at 2005-9-21 11:23 +0200:
 ...
I had zodb hanging when It had to solve Conflict situations.
It turned out to be that it tried to import some modules that
tried to instantiate ClientStorage...

I easily fixed the hurting code...
Lesson learned:

- never automatically register in db objects via __init__
   (or access to zodb, more generally)

- instantiate ClientStorage only when required...

Just a small suggestion. Is there any way to catch this problem
and issue a specific Execption rather that letting zeo hanging?

I modified runzeo to prevent it to start Zope.

It looks like this:

def main(args=None):
try:
# DM: prevent Zope from being start up
# (out of conflict resolution code)
import Zope; Zope.startup = None
except ImportError: pass

I also added the following patch:

# DM: 2004-06-03
# activate Zope's INSTANCE_HOME magic.
# This is necessary for conflict resolution of classes
# defined in $INSTANCE_HOME/Products
# Note that this is only a partial workaround. A complete solution
# would give ZEO the same Python path and product configuration options
# used by Zope. To get better control which classes are loaded
# an additional registration facility for such classes would
# be needed as well.
try: from App import FindHomes
except ImportError: pass # this is not Zope

-- 
Dieter
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev