What's new on ZODB 3.7b2? ========================= ClientStorage ------------- - (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. Connection management --------------------- - (3.7a1) When more than ``pool_size`` connections have been closed, ``DB`` forgets 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 ``DB`` forgets 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. Documentation ------------- - (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. IPersistent ----------- - (3.7a1) The documentation for ``_p_oid`` now specifies the concrete type of oids (in short, an oid is either None or a non-empty string). Testing ------- - (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. Tools ----- - (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. BTrees ------ - (3.7a1) Suppressed warnings about signedness of characters when compiling under GCC 4.0.x. See http://www.zope.org/Collectors/Zope/2027. Connection ---------- - (3.7a1) An optimization for loading non-current data (MVCC) was inadvertently disabled in ``_setstate()``; this has been repaired. persistent ---------- - (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 ``test_afterCommitHook()`` in ``transaction/tests/test_transaction.py`` for a tutorial doctest, and the ``ITransaction`` interface for details.