Major internal implementation changes to the Multi Version Concurrency Control (MVCC) implementation:
For storages that implement IMVCCStorage (RelStorage), no longer implement MVCC in ZODB.
For other storages, MVCC is implemented using an additional storage layer. This underlying layer works by calling
loadBefore. The low-level storage
loadmethod isn't used any more.
This change allows server-based storages like ZEO and NEO to be implemented more simply and cleanly.
v4.4.5February 06, 2017
🛠 Internal FileStorage-undo fixes that should allow undo in some cases where it didn't work before.
🖨 fstail: print the txn offset and header size, instead of only the data offset. fstail can now be used to truncate a DB at the right offset.
👍 Better support of the new commit protocol. This fixes issues with blobs and 👀 undo. See pull requests #77, #80, #83
➕ Added IMultiCommitStorage to directly represent the changes in the 4.4.0 🚀 release and to make complient storages introspectable.
🚀 This release begins evolution to a more effcient commit protocol that 👍 allows storage implementations, like
NEO <http://www.neoppod.org/>_, 👍 to support multiple transactions committing at the same time, for greater write parallelism.
🚀 This release updates IStorage:
The committed transaction's ID is returned by
tpc_finish, rather than being returned in response store and tpc_vote results.
tpc_voteis now expected to return
Noneor a list of object ids for objects for which conflicts were resolved.
🚀 This release works with storages that implemented the older version of 👍 the storage interface, but also supports storages that implement the ⚡️ updated interface.
- 🛠 Fixed: FileStorage loadBefore didn't handle deleted/undone data correctly.
⬇️ Drop support for Python 2.6 and 3.2.
👉 Make the
zodbpickledependency required and not conditional. This fixes various packaging issues involving pip and its wheel cache. zodbpickle was only optional under Python 2.6 so this change only impacts users of that version. See https://github.com/zopefoundation/ZODB/pull/42.
➕ Add support for Python 3.5.
Avoid failure during cleanup of nested databases that provide MVCC on storage level (Relstorage). https://github.com/zopefoundation/ZODB/issues/45
✂ Remove useless dependency to
zdaemonin setup.py. Remove ZEO documentation. Both were leftovers from the time where ZEO was part of this repository.
🛠 Fix possible data corruption after FileStorage is truncated to roll back a transaction. https://github.com/zopefoundation/ZODB/pull/52
👍 DemoStorage: add support for conflict resolution and fix history() https://github.com/zopefoundation/ZODB/pull/58
🛠 Fixed a test that depended on implementation-specific behavior in tpc_finish
👀 Log failed conflict resolution attempts at
DEBUGlevel. See: https://github.com/zopefoundation/ZODB/pull/29.
🛠 Fix command-line parsing of
--verifyarguments. (The short versions,
-V, were parsed correctly.)
➕ Add support for PyPy.
🛠 Fix the methods in
ZODB.serializethat find object references under Python 2.7 (used in scripts like
fsrecoveramong others). This requires the addition of the
FileStorage: fix an edge case when disk space runs out while packing, do not leave the
.packfile around. That would block any write to the to-be-packed
Data.fs, because the disk would stay at 0 bytes free. See https://github.com/zopefoundation/ZODB/pull/21.