[Zope-dev] ZODB3 3.1.1b1

Jeremy Hylton jeremy@zope.com
Tue, 10 Dec 2002 12:53:26 -0500


We have made a beta release of ZODB 3.1.1 and ZEO 2.0.1.  The primary
change is a fix that allows transactions with multiple databases to
run without deadlock.

These release will correspond exactly to Zope 2.6.1b1, which will also
be released today.

See
http://www.zope.org/Products/StandaloneZODB
http://www.zope.org/Products/ZEO

Zope developers who have written customer data managers (aka _p_jars)
should be sure to test this release.  The deadlock prevention code
changes the order in which data managers are invokved and prevents new
data managers from registering after a transaction has begun.

I've include the summary of changes below.

Jeremy

What's new in ZODB3 3.1.1?
==========================
Release date: 10-Dev-2002

It was possible for earlier versions of ZODB to deadlock when using
multiple storages.  If multiple transactions committed concurrently
and both transactions involved two or more shared storages, deadlock
was possible.  This problem has been fixed by introducing a sortKey()
method to the transaction and storage APIs that is used to define an
ordering on transaction participants.  This solution will prevent
deadlocks provided that all transaction participants that use locks
define a valid sortKey() method.  A warning is raised if a participant
does not define sortKey().  For backwards compatibility, BaseStorage
provides a sortKey() that uses __name__.

Added code to ThreadedAsync/LoopCallback.py to work around a bug in
asyncore.py: a handled signal can cause unwanted reads to happen.

A bug in FileStorage related to object uncreation was fixed.  If an
a transaction that created an object was undone, FileStorage could
write a bogus data record header that could lead to strange errors if
the object was loaded.  An attempt to load an uncreated object now
raises KeyError, as expected.

The restore() implementation in FileStorage wrote incorrect
backpointers for a few corner cases involving versions and undo.  It
also failed if the backpointer pointed to a record that was before the
pack time.  These specific bugs have been fixed and new test cases
were added to cover them.

A bug was fixed in conflict resolution that raised a NameError when a
class involved in a conflict could not be loaded.  The bug did not
affect correctness, but prevent ZODB from caching the fact that the
class was unloadable.  A related bug prevented spurious
AttributeErrors when a class could not be loaded.  It was also fixed.

The script Tools/zeopack.py was fixed to work with ZEO 2.  It was
untested and had two silly bugs.

Some C extensions included standard header files before including
Python.h, which is not allowed.  They now include Python.h first,
which eliminates compiler warnings in certain configurations.

  ZEO 2.0.1 (2002/12/10)

    The changes since the ZEO 2.0 release are:

      - The logging code for client connection was improved in several
        ways.  In particular, client connection and disconnection
        messages include the server's address.

      - ClientCache.py: make some functions into methods; include the
        storage name in all log messages; append the storage name to
        the trace filename.

      - zrpc/trigger.py: in handle_read() (both versions!), catch
        socket errors from the recv() call and return early in that
        case.