Jeremy Hylton : weblog : 2004-01-06

ZODB 3.3a2 released

Tuesday, January 06, 2004

We finally got the ZODB 3.3a2 release finished. The new features should make a big difference for users, and I'm generally happy with the state of the codebase. I had originally hoped to do it on Christmas Eve, but many small-but-hard-to-diagnose bugs delayed it.

I said more the in release announcement.

The new features represent major changes to ZODB. Support for new-style classes means that ZODB programmers can use the new class features introduced in Python 2.2, like properties and descriptors. It also means that ZODB no longer uses ExtensionClass, which caused many subtle incompatibilities with other classes.

The multi-version concurrency control feature represents the end of read conflicts. If a transaction encounters a conflict, it reads older revisions of the object rather than raising a ReadConflictError. This feature allows read-only transactions to see a consistent view of the database without need to handle read conflicts and restart the transaction.

The code is fairly stable, but we have noted a few hard-to-provoke bugs during development. One problem is a refcount problem in the persistence core that causes rare core dumps in Python's garbage collector. (Rare means once a week across multiple developers and testers.)

We hope to move to a beta release expeditiously, perhaps as early as next month. The final release schedule depends on the Zope 2.8 release schedule. More on that later.

Jim Fulton and Fred Drake are planning to work on persistent modules this month, first in Zope 3 / ZODB 4. I expect that we will get that code into the next ZODB 3.3 release, too. They have some notes in the Zope3 "Modules are Global" proposal.

I also noticed that Jim checked in some code for persistent weak references. A persistent weak reference is a reference to a persistent object that does not prevent the object from being packed. We had talked about this a few weeks ago, but I didn't realize it was actually going to be implemented. The chief difference with Python's weak references is that there is no callback function called when the object is collected. It doesn't make a lot of sense for ZODB, because it would have to be called during the pack operation; pack is a low-level mark-and-sweep operation that runs without any of the runtime necessary to execute user code.