ZODB v3.7.0 Release Notes
🚀 Release date: 2007-04-20
- 📦 (3.7.0b3) ZODB is now packaged without it's dependencies
ZODB no longer includes copies of dependencies such as ZConfig, zope.interface and so on. It now treats these as dependencies. If ZODB is installed with easy_install or zc.buildout, the dependencies will be installed automatically.
- 🏗 (3.7.0b3) ZODB is now a buildout
ZODB checkouts are now built and tested using zc.buildout.
🌲 (3.7b4) Added logic to avoid spurious errors from the logging system on exit.
🔀 (3.7b2) Removed the "sync" mode for ClientStorage.
Previously, a ClientStorage could be in either "sync" mode or "async" mode. Now there is just "async" mode. There is now a dedicicated asyncore main loop dedicated to ZEO clients.
Applications no-longer need to run an asyncore main loop to cause client storages to run in async mode. Even if an application runs an asyncore main loop, it is independent of the loop used by client storages.
This addresses a test failure on Mac OS X, http://www.zope.org/Collectors/Zope3-dev/650, that I believe was due to a bug in sync mode. Some asyncore-based code was being called from multiple threads that didn't expect to be.
Converting to always-async mode revealed some bugs that weren't caught before because the tests ran in sync mode. These problems could explain some problems we've seen at times with clients taking a long time to reconnect after a disconnect.
Added a partial heart beat to try to detect lost connections that aren't otherwise caught, http://mail.zope.org/pipermail/zodb-dev/2005-June/008951.html, by perioidically writing to all connections during periods of inactivity.
- (3.7a1) When more than
pool_sizeconnections have been closed,
DBforgets the excess (over
pool_size) connections closed first. Python's cyclic garbage collection can take "a long time" to reclaim them (and may in fact never reclaim them if application code keeps strong references to them), but such forgotten connections can never be opened again, so their caches are now cleared at the time
DBforgets them. Most applications won't notice a difference, but applications that open many connections, and/or store many large objects in connection caches, and/or store limited resources (such as RDB connections) in connection caches may benefit.
- 👌 Support for 64-bit integer keys and values has been provided as a compile-time option for the "I" BTrees (e.g. IIBTree).
- ✅ (3.7a1) Thanks to Stephan Richter for converting many of the doctest files to ReST format. These are now chapters in the Zope 3 apidoc too.
- (3.7a1) The documentation for
_p_oidnow specifies the concrete type of oids (in short, an oid is either None or a non-empty string).
- ✅ (3.7b2) Fixed test-runner output truncation.
A bug was fixed in the test runner that caused result summaries to be omitted when running on Windows.
- 🌲 (3.7a1) The changeover from zLOG to the logging module means that some tools need to perform minimal logging configuration themselves. Changed the zeoup script to do so and thus enable it to emit error messages.
- ⚠ (3.7a1) Suppressed warnings about signedness of characters when compiling under GCC 4.0.x. See http://www.zope.org/Collectors/Zope/2027.
- (3.7a1) An optimization for loading non-current data (MVCC) was
inadvertently disabled in
_setstate(); this has been repaired.
⚠ (3.7a1) Suppressed warnings about signedness of characters when compiling under GCC 4.0.x. See http://www.zope.org/Collectors/Zope/2027.
(3.7a1) PersistentMapping was inadvertently pickling volatile attributes (http://www.zope.org/Collectors/Zope/2052).
After Commit hooks
- (3.7a1) Transaction objects have a new method,
addAfterCommitHook(hook, *args, **kws). Hook functions registered with a transaction are called after the transaction commits or aborts. For example, one might want to launch non transactional or asynchrnonous code after a successful, or aborted, commit. See
transaction/tests/test_transaction.pyfor a tutorial doctest, and the
ITransactioninterface for details.