1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
|
What's new in ZODB3 3.6.0?
==========================
Release date: 05-Jan-2006
Following is combined news from internal releases (to support ongoing
Zope3 development). These are the dates of the internal releases:
- 3.6b6 01-Jan-2006
- 3.6b5 18-Dec-2005
- 3.6b4 04-Dec-2005
- 3.6b3 06-Nov-2005
- 3.6b2 25-Oct-2005
- 3.6b1 24-Oct-2005
- 3.6a4 07-Oct-2005
- 3.6a3 07-Sep-2005
- 3.6a2 06-Sep-2005
- 3.6a1 04-Sep-2005
Removal of Features Deprecated in ZODB 3.4
------------------------------------------
(3.6b2) ZODB 3.6 no longer contains features officially deprecated in the
ZODB 3.4 release. These include:
- ``get_transaction()``. Use ``transaction.get()`` instead.
``transaction.commit()`` is a shortcut spelling of
``transaction.get().commit()``, and ``transaction.abort()``
of ``transaction.get().abort()``. Note that importing ZODB no longer
installs ``get_transaction`` as a name in Python's ``__builtin__``
module either.
- The ``begin()`` method of ``Transaction`` objects. Use the ``begin()``
method of a transaction manager instead. ``transaction.begin()`` is
a shortcut spelling to call the default transaction manager's ``begin()``
method.
- The ``dt`` argument to ``Connection.cacheMinimize()``.
- The ``Connection.cacheFullSweep()`` method. Use ``cacheMinimize()``
instead.
- The ``Connection.getTransaction()`` method. Pass a transaction manager
to ``DB.open()`` instead.
- The ``Connection.getLocalTransaction()`` method. Pass a transaction
manager to ``DB.open()`` instead.
- The ``cache_deactivate_after`` and ``version_cache_deactivate_after``
arguments to the ``DB`` constructor.
- The ``temporary``, ``force``, and ``waitflag`` arguments
to ``DB.open()``. ``DB.open()`` no longer blocks (there's no longer
a fixed limit on the number of open connections).
- The ``transaction`` and ``txn_mgr``arguments to ``DB.open()``. Use
the ``transaction_manager`` argument instead.
- The ``getCacheDeactivateAfter``, ``setCacheDeactivateAfter``,
``getVersionCacheDeactivateAfter`` and ``setVersionCacheDeactivateAfter``
methods of ``DB``.
Persistent
----------
- (3.6a4) ZODB 3.6 introduces a change to the basic behavior of Persistent
objects in a particular end case. Before ZODB 3.6, setting
``obj._p_changed`` to a true value when ``obj`` was a ghost was ignored:
``obj`` remained a ghost, and getting ``obj._p_changed`` continued to
return ``None``. Starting with ZODB 3.6, ``obj`` is activated instead
(unghostified), and its state is changed from the ghost state to the
changed state. The new behavior is less surprising and more robust.
- (3.6b5) The documentation for ``_p_oid`` now specifies the concrete
type of oids (in short, an oid is either None or a non-empty string).
Commit hooks
------------
- (3.6a1) The ``beforeCommitHook()`` method has been replaced by the new
``addBeforeCommitHook()`` method, with a more-robust signature.
``beforeCommitHook()`` is now deprecated, and will be removed in ZODB 3.8.
Thanks to Julien Anguenot for contributing code and tests.
Connection management
---------------------
- (3.6b6) When more than ``pool_size`` connections have been closed,
``DB`` forgets the excess (over ``pool_size``) connections closed first.
Python's cyclic garbage collection can take "a long time" to reclaim them
(and may in fact never reclaim them if application code keeps strong
references to them), but such forgotten connections can never be opened
again, so their caches are now cleared at the time ``DB`` forgets them.
Most applications won't notice a difference, but applications that open
many connections, and/or store many large objects in connection caches,
and/or store limited resources (such as RDB connections) in connection
caches may benefit.
ZEO
---
- (3.6a4) Collector 1900. In some cases of pickle exceptions raised by
low-level ZEO communication code, callers of ``marshal.encode()`` could
attempt to catch an exception that didn't actually exist, leading to an
erroneous ``AttributeError`` exception. Thanks to Tres Seaver for the
diagnosis.
BaseStorage
-----------
- (3.6a4) Nothing done by ``tpc_abort()`` should raise an exception.
However, if something does (an error case), ``BaseStorage.tpc_abort()``
left the commit lock in the acquired state, causing any later attempt
to commit changes hang.
Multidatabase
-------------
- (3.6b1) The ``database_name`` for a database in a multidatabase
collection can now be specified in a config file's ``<zodb>`` section,
as the value of the optional new ``database_name`` key. The
``.databases`` attribute cannot be specified in a config file, but
can be passed as the optional new ``databases`` argument to the
``open()`` method of a ZConfig factory for type ``ZODBDatabase``.
For backward compatibility, Zope 2.9 continues to allow using the
name in its ``<zodb_db name>`` config section as the database name
(note that ``<zodb_db>`` is defined by Zope, not by ZODB -- it's a
Zope-specific extension of ZODB's ``<zodb>`` section).
PersistentMapping
-----------------
- (3.6b4) ``PersistentMapping`` makes changes by a ``pop()`` method call
persistent now.
- (3.6a1) The ``PersistentMapping`` class has an ``__iter__()`` method
now, so that objects of this type work well with Python's iteration
protocol. For example, if ``x`` is a ``PersistentMapping`` (or
Python dictionary, or BTree, or ``PersistentDict``, ...), then
``for key in x:`` iterates over the keys of ``x``, ``list(x)`` creates
a list containing ``x``'s keys, ``iter(x)`` creates an iterator for
``x``'s keys, and so on.
Tools
-----
- (3.6b5) The changeover from zLOG to the logging module means that some
tools need to perform minimal logging configuration themselves. Changed
the zeoup script to do so and thus enable it to emit error messages.
BTrees
------
- (3.6a1) BTrees and Buckets now implement the ``setdefault()`` and ``pop()``
methods. These are exactly like Python's dictionary methods of the same
names, except that ``setdefault()`` requires both arguments (and Python is
likely to change to require both arguments too -- defaulting the
``default`` argument to ``None`` has no viable use cases). Thanks to
Ruslan Spivak for contributing code, tests, and documentation.
- (3.6a1) Collector 1873. It wasn't possible to construct a BTree or Bucket
from, or apply their update() methods to, a PersistentMapping or
PersistentDict. This works now.
ZopeUndo
--------
- (3.6a4) Collector 1810. A previous bugfix (#1726) broke listing undoable
transactions for users defined in a non-root acl_users folder. Zope logs
a acl_users path together with a username (separated by a space) and this
previous fix failed to take this into account.
Connection
----------
- (3.6b5) An optimization for loading non-current data (MVCC) was
inadvertently disabled in ``_setstate()``; this has been repaired.
Documentation
-------------
- (3.6b3) Thanks to Stephan Richter for converting many of the doctest
files to ReST format. These are now chapters in the Zope 3 apidoc too.
- (3.6b4) Several misspellings of "occurred" were repaired.
Development
-----------
- (3.6a1) The source code for the old ExtensionClass-based Persistence
package moved, from ZODB to the Zope 2.9 development tree. ZODB 3.5
makes no use of Persistence, and, indeed, the Persistence package could
not be compiled from a ZODB release, since some of the C header files
needed appear only in Zope.
- (3.6a3) Re-added the ``zeoctl`` module, for the same reasons
``mkzeoinst`` was re-added (see below).
- (3.6a2) The ``mkzeoinst`` module was re-added to ZEO, because Zope3
has a script that expects to import it from there. ZODB's ``mkzeoinst``
script was rewritten to invoke the ``mkzeoinst`` module.
``transact``
------------
- (3.6b4) Collector 1959: The undocumented ``transact`` module no
longer worked. It remains undocumented and untested, but thanks to
Janko Hauser it's possible that it works again ;-).
|