[Zope-dev] ZEO install/runtime issues

Jeremy Hylton jeremy@zope.com
27 May 2003 14:38:33 -0400


[Please followup to zodb-dev.]

Richard,

You made some changes to the mkzeoinst.py script in April.  I was busy
then, and I've just had a chance to look at the changes now.  I'd like
to discuss some of the changes, and I'm including a wider discussion
list to make sure we include anyone else who is interested.

A number of the changes are Zope specific.  (For example, you can't even
run mkzeoinst.py without having a directory named "Zope" hanging off of
sys.path.)  ZEO and ZODB are intended for use separately from the rest
of Zope, so we need to find a way to factor this out into a generic
configuration and a Zope-specific configuration.

One other requirement for ZEO is that it work with Zope 2.6.  I expect
there will be a ZODB 3.2 release long before there is a Zope 2.7
release.  So we can't depend on any Zope 2.7 features in mkzeoinst.py.

The other question I have is about the organization of software into a
Zope home and an instance home.  I'm not sure what the history of this
arrangement is, but I recommend that people do not configure their ZEO
servers to share software with their Zope app servers.  It can cause
fairly severe problems!  

The problem with sharing software is that the ZEO server can load
arbitrary modules when it attempts to perform conflict resolution.  If
there is a conflict for an instance of class A.B.C, then ZEO will load
A.B.C and see if it has an _p_resolveConflict() method.  If the modules
A or B have any side-effects at import time, then those side-effects
will occur in the ZEO server.  I've seen this method lookup cause all of
CMF to get imported and try to initialize itself.  This ended up brining
down the ZEO server.

A safer way to run a ZEO server is to have an isolated copy of the
software that only contains software for objects that need to perform
conflict resolution.  In practice, many sites only need conflict
resolution for BTrees.  So none of the other Zope or product code needs
to be accessible to the ZEO server.

Do you have any ideas about how to support the features you need given
the requirements I've suggested here?  Do those requirements make sense?

Jeremy