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, 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_vote
is now expected to returnNone
or 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
zodbpickle
dependency 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 #42. - Add support for Python 3.5.
- Avoid failure during cleanup of nested databases that provide MVCC on storage level (Relstorage). #45
- Remove useless dependency to zdaemon in 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. #52
- DemoStorage: add support for conflict resolution and fix history() #58
- Fixed a test that depended on implementation-specific behavior in tpc_finish
- Declare conditional dependencies using PEP-426 environment markers (fixing interation between pip 7's wheel cache and tox). See #36.
- Log failed conflict resolution attempts at
DEBUG
level. See: #29. - Fix command-line parsing of
--verbose
and--verify
arguments. (The short versions,-v
and-V
, were parsed correctly.) - Add support for PyPy.
- Fix the methods in
ZODB.serialize
that find object references under Python 2.7 (used in scripts likereferrers
,netspace
, andfsrecover
among others). This requires the addition of thezodbpickle
dependency. - FileStorage: fix an edge case when disk space runs out while packing, do not leave the
.pack
file around. That would block any write to the to-be-packedData.fs
, because the disk would stay at 0 bytes free. See #21.
Fix registration of custom logging level names ("BLATHER", "TRACE").
We have been registering them in the wrong order since 2004. Before Python 3.4, the stdlib
logging
module masked the error by registering them in both directions.- Add support for Python 3.4.
- Fix
POSKeyError
duringtransaction.commit
when aftersavepoint.rollback
. See #16 - Ensure that the pickler used in PyPy always has a
persistent_id
attribute (inst_persistent_id
is not present on the pure-Python pickler). (PR #17) - Provide better error reporting when trying to load an object on a closed connection.
Finally released.
- Switch to using non-backward-compatible pickles (protocol 3, without storing bytes as strings) under Python 3. Updated the magic number for file-storage files under Python3 to indicate the incompatibility.
- Fixed: A
UnicodeDecodeError
could happen for non-ASCII OIDs when using bushy blob layout.
- Extended the filename renormalizer used for blob doctests to support the filenames used by ZEO in non-shared mode.
- Added
url
parameter tosetup()
(PyPI says it is required).
- Skipped non-unit tests in
setup.py test
. Use the buildout to run tests requiring "layer" support. - Included the filename in the exception message to support debugging in case
loadBlob
does not find the file. - Added support for Python 3.2 / 3.3.
Note
ZODB 4.0.x is supported on Python 3.x for new applications only. Due to changes in the standard library's pickle support, the Python3 support does not provide forward- or backward-compatibility at the data level with Python2. A future version of ZODB may add such support.
Applications which need migrate data from Python2 to Python3 should plan to script this migration using separte databases, e.g. via a "dump-and-reload" approach, or by providing explicit fix-ups of the pickled values as transactions are copied between storages.
- Enforced usage of bytes for
_p_serial
of persistent objects (fixes compatibility with recent persistent releases).
- Fixed: An elaborate test for trvial logic corrupted module state in a
way that made other tests fail spuriously.
- An unneeded left-over setting in setup.py caused installation with pip to fail.
- The
persistent
andBTrees
packages are now released as separate distributions, on which ZODB now depends. - ZODB no longer depends on zope.event. It now uses ZODB.event, which uses zope.event if it is installed. You can override ZODB.event.notify to provide your own event handling, although zope.event is recommended.
- BTrees allowed object keys with insane comparison. (Comparison inherited from object, which compares based on in-process address.) Now BTrees raise TypeError if an attempt is made to save a key with comparison inherited from object. (This doesn't apply to old-style class instances.)
Ensured that the export file and index file created by
repozo
share the same timestamp.- Pinned the
transaction
andmanuel
dependencies to Python 2.5-compatible versions when installing under Python 2.5.
Note
Please see doc/HISTORY.txt
for changelog entries for older versions of ZODB.