Drop support for Python 2.7, 3.5, 3.6.
Add support for Python 3.12.
Switch to using async/await directly instead of @coroutine/yield
Drop experimental support for credentials object: the corresponding ClientStorage.__init__ parameter credentials is retained but ignored. From now on ZEO supports authentication only via SSL certificates.
Note that ZEO 5 never supported authenticating via username and password - support for such basic auth was dropped in 2016 before ZEO 5.0 was released.
Fix problems with Python 3.12.0b4 (issue 231 <https://github.com/zopefoundation/ZEO/issues/231>_).
Ensure test compatibility with both ZODB<6 and ZODB>=6 by looking for ZODB inherited tests with prefixes check (used by ZODB<6) and test (used by ZODB>=6) (issue 233 <https://github.com/zopefoundation/ZEO/issues/233>_).
Reimplement and streamline the asyncio part of the ClientStorage implementation:
- switch from futures with explicit callbacks to async/await-like style
- use standard asyncio features to implement timeouts
- redesign the API of the class implementing the ZEO client protocol
- significantly improve source documentation and tests
- fix several concurrency bugs
- add optional cython based optimization; it speeds up reads but slows down writes. To use it, install cython (and its dependencies) and run cythonize -i *.pyx in src/ZEO/asyncio.
Remove support for interoperability with ZEO4 server. It turned out that ZEO5 client, contrary to interoperability with ZEO5 server, implements support for interoperability with ZEO4 server incorrectly with concurrency bugs that lead to data corruption. The fix is not trivial and we believe that in 2022 noone actually uses ZEO5.client-ZEO4.server configuration. That's why support for ZEO4 server was dropped rather than fixed.
See issue 209 for details.
If the zeopack script cannot connect to a server it sets exit status 1 See #214.
Remove asyncio/mtacceptor module. It turned out that multi-threaded ZEO5 server has concurrency issues that lead to data corruption. Multi-threaded server mode was already deprecated and scheduled for removal, so the fix is to finally remove it. From now on ZEO server is always single-threaded.
See issue 209 for details.
Test ZEO only with the following storages FileStorage with server side blobs, FileStorage with shared blob directory, MappingStorage (without blobs).
Those tests cover all storage features with impact on ZEO: without blobs, with shared blobs and with server side blobs; load, store, two phase commit, undo. Therefore, passing tests for those storages provide high confidence that ZEO works for other properly implemented storages as well. See #198.
Lint the code with flake8
Add support for Python 3.10, 3.11.
Add ConflictError to the list of unlogged server exceptions (the client/its application should determine whether it wants them logged).
Prevent no current transaction: tpc_abort() server log entries. The storage API allows tpc_abort to be called with an invalid transaction (the call should be ignored in this case) and the server's tpc_vote relies on this.
Change the server's log message label for request exceptions from Bad request ... to ... raised exception:, hinting towards a server rather than client problem.
See issue 156.
Remove support for python setup.py test. It hadn't been working for some time. From now the only supported way to run tests is via zope-testrunner.
Fixed: The quickstart/ad-hoc/play ZEO server relied on test dependencies. See issue 105.
Disallow passing strings as addresses to ClientStorage under Windows because string addresses are used for unix-domain sockets, which aren't supported on Windows. See issue 107.
Renamed all async attributes to async_ for compatibility with Python 3.7. See issue 104.
Fixed to work with some changes made in ZODB 5.4.0.
Client-side updates are included for ZODB 5.4.0 or databases that already had zodbpickle.binary OIDs. See issue 113.
ZEO now uses pickle protocol 3 for both Python 2 and Python 3. (Previously protocol 1 was used for Python 2.) This matches the change in ZODB 5.4.0.
Fix: ZEO didn't work with a change in ZODB 5.4.0.
(Allow zodbpickle.binary to be used in RPC requests, which is necessary for compatibility with ZODB 5.4.0 on Python 2. See issue 107.)
Fixed: ZEO needed changes to work with recent transaction changes.
ZEO now works with the latest versions of ZODB and transaction
Packaging-related doc fix
This is a major ZEO revision, which replaces the ZEO network protocol implementation.
New features:
SSL support
Optional client-side conflict resolution.
Lots of mostly internal clean ups.
ClientStorage``server-sync configuration option and server_sync constructor argument to force a server round trip at the beginning of transactions to wait for any outstanding invalidations at the start of the transaction to be delivered.
Client disconnect errors are now transient errors. When applications retry jobs that raise transient errors, jobs (e.g. web requests) with disconnect errors will be retried. Together with blocking synchronous ZEO server calls for a limited time while disconnected, this change should allow brief disconnections due to server restart to avoid generating client-visible errors (e.g. 500 web responses).
ClientStorage prefetch method to prefetch oids.
When oids are prefetched, requests are made at once, but the caller doesn't block waiting for the results. Rather, then the caller later tries to fetch data for one of the object ids, it's either delivered right away from the ZEO cache, if the prefetch for the object id has completed, or the caller blocks until the inflight prefetch completes. (No new request is made.)
Dropped features:
The ZEO authentication protocol.
This will be replaced by new authentication mechanims leveraging SSL.
The ZEO monitor server.
Full cache verification.
Client suppprt for servers older than ZODB 3.9
Server support for clients older than ZEO 4.2.0
Added the ability to pass credentials when creating client storages.
This is experimental in that passing credentials will cause connections to an ordinary ZEO server to fail, but it facilitates experimentation with custom ZEO servers. Doing this with custom ZEO clients would have been awkward due to the many levels of composition involved.
In the future, we expect to support server security plugins that consume credentials for authentication (typically over SSL).
Note that credentials are opaque to ZEO. They can be any object with a true value. The client mearly passes them to the server, which will someday pass them to a plugin.
Added a ClientStorage prefetch method to prefetch oids.
When oids are prefetched, requests are made at once, but the caller doesn't block waiting for the results. Rather, then the caller later tries to fetch data for one of the object ids, it's either delivered right away from the ZEO cache, if the prefetch for the object id has completed, or the caller blocks until the inflight prefetch completes. (No new request is made.)
Fixed: SSL clients of servers with signed certs didn't load default certs and were unable to connect.
This is a major ZEO revision, which replaces the ZEO network protocol implementation.
New features:
Dropped features:
The ZEO authentication protocol.
This will be replaced by new authentication mechanims leveraging SSL.
The ZEO monitor server.
Full cache verification.
Client suppprt for servers older than ZODB 3.9
Server support for clients older than ZEO 4.2.0
Changed loadBefore to operate more like load behaved, especially with regard to the load lock. This allowes ZEO to work with the upcoming ZODB 5, which used loadbefore rather than load.
Reimplemented load using loadBefore, thus testing loadBefore extensively via existing tests.
Other changes to work with ZODB 5 (as well as ZODB 4)
Fixed: the ZEO cache loadBefore method failed to utilize current data.
Drop support for Python 2.6 and 3.2.
Fix AttributeError: 'ZEOServer' object has no attribute 'server' when StorageServer creation fails.
First (in a long time) separate ZEO release.
Since ZODB 3.10.5: