Tim Peters wrote:
> describes some of the code problems with Zope's current way of mounting
> databases. ZODB 3.4 (still) has a Mount.py module, unused and untested by
> ZODB. Jim and I were both surprised today to discover that Zope (2.8) still
> imports it, so we can't drop it for ZODB 3.4 (Zope 2.8, and the ZODB 3.4 it
> uses, are both in beta).
> We'd like to continue getting non-ZODB code out of the ZODB project, so
> would like to drop Mount.py from ZODB 3.5. Are any of zodb-dev's
> "standalone" ZODB users making use of Mount.py? I would be surprised by
> that too, since Mount.py relies on other code (like Acquisition) that's
> already been removed from the ZODB 3.3 and 3.4 lines. I've been surprised
> before, though ...
ZODB/Mount.py is dangerous. In the past few years, Jim and I have
discovered necessary constraints on mounted databases, and
ZODB/Mount.py has not been updated to reflect that thinking. The main
problem is that ZODB/Mount.py does not bind each mounted connection with
a specific root database connection; instead, mounted connections are
free to be used with any root database connection. The result is that
_v_ attributes that cross mount boundaries turn insane.
I solved the connection binding problem when I wrote the DBTab product,
but the solution required an ugly monkey patch. Later, DBTab got folded
into Zope, but not the way I expected. By the time I saw the
integration, it was the wrong time to fix it. (I don't blame anyone for
this mistake; DBTab was complex and I didn't explain well enough how it
So now there's a mess to clean up. I suggest:
1. Products/TemporaryFolder is the only code in Zope that uses
ZODB/Mount.py. Before the Zope 2.8.0 release, put a copy of
ZODB/Mount.py in Products/TemporaryFolder and change the import
statement to import that copy instead.
2. With the last Zope reference gone, remove ZODB/Mount.py from ZODB
3.3, 3.4, and 3.5. If standalone ZODB authors really depend on it, they
can get their own copy and change their own import statements.
3. Update Products/ZODBMountPoint/Mount.py to use whatever method ZODB
3.5 wants to use for mounting databases, removing the ugly
4. Change TemporaryFolder to use Products/ZODBMountPoint/Mount.py and
finally remove Products/TemporaryFolder/Mount.py.
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org