We've just released ZEO 2.0 beta 1.It's available from http://www.zope.org/Products/ZEO. We think this release of ZEO 2 is fairly stable, although we may do one more beta release to add some performance improvements. There are many changes since ZEO 2.0a1, which was released in May. The CHANGES.txt file describes the most significant changes; I've included the 2.0b1 changes list at the end of this message. The ZEO 2 protocol is not backwards compatible with ZEO 1. If you want to upgrade a system, all the clients and servers need to be upgraded at the same time. I don't plan to provide backwards compatibility for 2.0, but could be convinced otherwise if there is significant user demand. In the alpha release, we reported that the test suite was a bit fragile on Windows. It is much better now. We have tested on Windows 2000 and Windows 98, and expect all the tests to pass. The tests may run very slow on Windows, because many of the tests spawn server processes. The Windows scheduler can make this very slow. On occasion, we've seen the tests hang for several minutes before finishing successfully. After the alpha release, I suggested that there would be several more alpha releases to add new features. We didn't have the resources to pursue the new features. Instead, we plan to get a solid 2.0 final release out as soon as possible. New features will be postponed until 2.1. Jeremy The changes since ZEO 2.0a1 release are: - Added version identification. The variable ZEO.version is a string identifying the version in the style of sys.version. The same string is also available in ZEO/version.txt for people who want to check without loading the code. - Fixed performance problem. The low-level socket code was often calling send() with very small strings instead of joining them together before calling send. The small string variant ran afoul of the Nagle algorithm and delayed TCP acks. - Fix bugs in server handling of queued transactions Several bugs in 2.0a1 could cause the storage to lock up when it attempted to restart a transaction that was queued waiting for an earlier transaction to finish. The locking code in the two-phase commit methods was revised to properly use the condition variable protocol. Thanks to Tim Peters for pointing this out. - Avoid locking up server on unexpected client exit If a client disconnected unexpectedly in the middle of a two- phase commit, the server would never release the commit lock. - Very long log messages avoided. Some of the logging messages at BLATHER and lower were producing very long log messages because they included all the argument of method calls, even when the argument was a list with thousands of elements. These log messages are now truncated at a reasonable length. - Fix log rotation The SIGHUP behavior was fixed. If the ZEO server receives a SIGHUP, it will re-initialize its logging code. Thus, it is possible to rotate the log files and then send a HUP. - Fixed problem handling signals. The asyncore and zrpc error handlers would trap SystemExit if it was raised by a signal handler. They now ignore it. - pack() can be called on a read-only connection This ends up being very convenient for packing a read-only server, even though it isn't obvious that pack() is a read- only operation. - pack(wait=1) now waits A bug caused pack(wait=1) to return immediately, even though the pack was still running. - Fix bug in history(). The history() implementation prevent the client from returning more than one item. - Enhanced logging for blocked transactions. If a transaction had to be blocked because another transaction was executing, the server would log an info message. Now it also logs a message when the transaction is resumed, so that it doesn't look like the transaction was blocked forever. - Fixed bug in logging call for store(). The logging call could raise NameError. - Removed debug argument to ClientStorage constructor. It had no effect. - Removed ZEO.trigger There were two copies of the trigger module in the last release. The one in ZEO.trigger was removed, because it is only needed in ZEO.zrpc.trigger. - Added minimal tests of start.py. There are only run on Unix.