------------------
- 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 <https://github.com/zopefoundation/ZEO/issues/209>`_ for details.
- If the ``zeopack`` script cannot connect to a server it sets exit status 1
See `214 <https://github.com/zopefoundation/ZEO/issues/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 <https://github.com/zopefoundation/ZEO/issues/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 <https://github.com/zopefoundation/ZEO/issues/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 <https://github.com/zopefoundation/ZEO/issues/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``.