[Zodb-checkins] SVN: ZODB/trunk/ Updated change logs in preparation for 3.10.0 release:

Jim Fulton jim at zope.com
Fri Oct 8 13:25:17 EDT 2010


Log message for revision 117388:
  Updated change logs in preparation for 3.10.0 release:
  
  - Moved 3.9 changes to HISTORY.txt.
  
  - Consolidated 3.10 pre-release entries.
  
  - Removed 3.10 (bug fix) entries for fixes that were in 3.9, so the
    3.10 changes are from 3.9.
  

Changed:
  U   ZODB/trunk/HISTORY.txt
  U   ZODB/trunk/src/CHANGES.txt

-=-
Modified: ZODB/trunk/HISTORY.txt
===================================================================
--- ZODB/trunk/HISTORY.txt	2010-10-08 16:12:18 UTC (rev 117387)
+++ ZODB/trunk/HISTORY.txt	2010-10-08 17:25:16 UTC (rev 117388)
@@ -1,3 +1,652 @@
+
+3.9.7 (2010-09-28)
+==================
+
+Bugs Fixed
+----------
+
+- Changes in way that garbage collection treats dictionaries in Python
+  2.7 broke the object/connection cache implementation.
+  (https://bugs.launchpad.net/zodb/+bug/641481)
+
+  Python 2.7 wasn't officially supported, but we were releasing
+  binaries for it, so ...
+
+- Logrotation/repoening via a SIGUSR2 signal wasn't implemented.
+  (https://bugs.launchpad.net/zodb/+bug/143600)
+
+- When using multi-databases, cache-management operations on a
+  connection, cacheMinimize and cacheGC, weren't applied to
+  subconnections.
+
+3.9.6 (2010-09-21)
+==================
+
+Bugs Fixed
+----------
+
+- Updating blobs in save points could cause spurious "invalidations
+  out of order" errors.  https://bugs.launchpad.net/zodb/+bug/509801
+
+  (Thanks to Christian Zagrodnick for chasing this down.)
+
+- If a ZEO client process was restarted while invalidating a ZEO cache
+  entry, the cache could be left in a stage when there is data marked
+  current that should be invalidated, leading to persistent conflict
+  errors.
+
+- Corrupted or invalid cache files prevented ZEO clients from
+  starting. Now, bad cache files are moved aside.
+
+- Invalidations of object records in ZEO caches, where the
+  invalidation transaction ids matched the cached transaction ids
+  should have been ignored.
+
+- Shutting down a process while committing a transaction or processing
+  invalidations from the server could cause ZEO persistent client
+  caches to have invalid data.  This, in turn caused stale data to
+  remain in the cache until it was updated.
+
+- Conflict errors didn't invalidate ZEO cache entries.
+
+- When objects were added in savepoints and either the savepoint was
+  rolled back (https://bugs.launchpad.net/zodb/+bug/143560) or the
+  transaction was aborted
+  (https://mail.zope.org/pipermail/zodb-dev/2010-June/013488.html)
+  The objects' _p_oid and _p_jar variables weren't cleared, leading to
+  surprizing errors.
+
+- Objects added in transactions that were later aborted could have
+  _p_changed still set (https://bugs.launchpad.net/zodb/+bug/615758).
+
+- ZEO extension methods failed when a client reconnected to a
+  storage. (https://bugs.launchpad.net/zodb/+bug/143344)
+
+- On Mac OS X, clients that connected and disconnected quickly could
+  cause a ZEO server to stop accepting connections, due to a failure
+  to catch errors in the initial part of the connection process.
+
+  The failure to properly handle exceptions while accepting
+  connections is potentially problematic on other platforms.
+
+  Fixes: https://bugs.launchpad.net/zodb/+bug/135108
+
+- Passing keys or values outside the range of 32-bit ints on 64-bit
+  platforms led to undetected overflow errors. Now these cases cause
+  Type errors to be raised.
+
+  https://bugs.launchpad.net/zodb/+bug/143237
+
+- BTree sets and tree sets didn't correctly check values passed to
+  update or to constructors, causing Python to exit under certain
+  circumstances.
+
+- The verbose mode of the fstest was broken.
+  (https://bugs.launchpad.net/zodb/+bug/475996)
+
+3.9.5 (2010-04-23)
+==================
+
+Bugs Fixed
+----------
+
+- Fixed bug in cPickleCache's byte size estimation logic.
+  (https://bugs.launchpad.net/zodb/+bug/533015)
+
+- Fixed a serious bug that caused cache failures when run
+  with Python optimization turned on.
+
+  https://bugs.launchpad.net/zodb/+bug/544305
+
+- Fixed a bug that caused savepoint rollback to not properly
+  set object state when objects implemented _p_invalidate methods
+  that reloaded ther state (unghostifiable objects).
+
+  https://bugs.launchpad.net/zodb/+bug/428039
+
+- cross-database wekrefs weren't handled correctly.
+
+  https://bugs.launchpad.net/zodb/+bug/435547
+
+- The mkzeoinst script was fixed to tell people to
+  install and use the mkzeoinstance script. :)
+
+3.9.4 (2009-12-14)
+==================
+
+Bugs Fixed
+----------
+
+- A ZEO threading bug could cause transactions to read inconsistent
+  data.  (This sometimes caused an AssertionError in
+  Connection._setstate_noncurrent.)
+
+- DemoStorage.loadBefore sometimes returned invalid data which
+  would trigger AssertionErrors in ZODB.Connection.
+
+- History support was broken when using stprages that work with ZODB
+  3.8 and 3.9.
+
+- zope.testing was an unnecessary non-testing dependency.
+
+- Internal ZEO errors were logged at the INFO level, rather
+  than at the error level.
+
+- The FileStorage backup and restore script, repozo, gave a
+  deprecation warning under Python 2.6.
+
+- C Header files weren't installed correctly.
+
+- The undo implementation was incorrect in ways that could cause
+  subtle missbehaviors.
+
+3.9.3 (2009-10-23)
+==================
+
+Bugs Fixed
+----------
+
+- 2 BTree bugs, introduced by a bug fix in 3.9.0c2, sometimes caused
+  deletion of keys to be improperly handled, resulting in data being
+  available via iteraation but not item access.
+
+3.9.2 (2009-10-13)
+==================
+
+Bugs Fixed
+----------
+
+- ZEO manages a separate thread for client network IO.  It created
+  this thread on import, which caused problems for applications that
+  implemented daemon behavior by forking.  Now, the client thread
+  isn't created until needed.
+
+- File-storage pack clean-up tasks that can take a long time
+  unnecessarily blocked other activity.
+
+- In certain rare situations, ZEO client connections would hang during
+  the initial connection setup.
+
+3.9.1 (2009-10-01)
+==================
+
+Bugs Fixed
+----------
+
+- Conflict errors committing blobs caused ZEO servers to stop committing
+  transactions.
+
+3.9.0 (2009-09-08)
+==================
+
+New Features (in more or less reverse chronological order)
+----------------------------------------------------------
+
+- The Database class now has an ``xrefs`` keyword argument and a
+  corresponding allow-implicit-cross-references configuration option.
+  which default to true.  When set to false, cross-database references
+  are disallowed.
+
+- Added support for RelStorage.
+
+- As a convenience, the connection root method for returning the root
+  object can now *also* be used as an object with attributes mapped to
+  the root-object keys.
+
+- Databases have a new method, ``transaction``, that can be used with the
+  Python (2.5 and later) ``with`` statement::
+
+     db = ZODB.DB(...)
+     with db.transaction() as conn:
+          # ... do stuff with conn
+
+  This uses a private transaction manager for the connection.
+  If control exits the block without an error, the transaction is
+  committed, otherwise, it is aborted.
+
+- Convenience functions ZODB.connection and ZEO.connection provide a
+  convenient way to open a connection to a database.  They open a
+  database and return a connection to it. When the connection is
+  closed, the database is closed as well.
+
+- The ZODB.config databaseFrom... methods now support
+  multi-databases. If multiple zodb sections are used to define
+  multiple databases, the databases are connected in a multi-database
+  arrangement and the first of the defined databases is returned.
+
+- The zeopack script has gotten a number of improvements:
+
+  - Simplified command-line interface. (The old interface is still
+    supported, except that support for ZEO version 1 servers has been
+    dropped.)
+
+  - Multiple storages can be packed in sequence.
+
+    - This simplifies pack scheduling on servers serving multiple
+      databases.
+
+    - All storages are packed to the same time.
+
+  - You can now specify a time of day to pack to.
+
+  - The script will now time out if it can't connect to s storage in
+    60 seconds.
+
+- The connection now estimates the object size based on its pickle size
+  and informs the cache about size changes.
+
+  The database got additional configurations options (`cache-size-bytes`
+  and `historical-cache-size-bytes`) to limit the
+  cache size based on the estimated total size of cached objects.
+  The default values are 0 which has the interpretation "do not limit
+  based on the total estimated size".
+  There are corresponding methods to read and set the new configuration
+  parameters.
+
+- Connections now have a public ``opened`` attribute that is true when
+  the connection is open, and false otherwise.  When true, it is the
+  seconds since the epoch (time.time()) when the connection was
+  opened. This is a renaming of the previous ``_opened`` private
+  variable.
+
+- FileStorage now supports blobs directly.
+
+- You can now control whether FileStorages keep .old files when packing.
+
+- POSKeyErrors are no longer logged by ZEO servers, because they are
+  really client errors.
+
+- A new storage interface, IExternalGC, to support external garbage
+  collection, http://wiki.zope.org/ZODB/ExternalGC, has been defined
+  and implemented for FileStorage and ClientStorage.
+
+- As a small convenience (mainly for tests), you can now specify
+  initial data as a string argument to the Blob constructor.
+
+- ZEO Servers now provide an option, invalidation-age, that allows
+  quick verification of ZEO clients have been disconnected for less
+  than a given time even if the number of transactions the client
+  hasn't seen exceeds the invalidation queue size. This is only
+  recommended if the storage being served supports efficient iteration
+  from a point near the end of the transaction history.
+
+- The FileStorage iterator now handles large files better.  When
+  iterating from a starting transaction near the end of the file, the
+  iterator will scan backward from the end of the file to find the
+  starting point.  This enhancement makes it practical to take
+  advantage of the new storage server invalidation-age option.
+
+- Previously, database connections were managed as a stack.  This
+  tended to cause the same connection(s) to be used over and over.
+  For example, the most used connection would typically be the only
+  connection used.  In some rare situations, extra connections could
+  be opened and end up on the top of the stack, causing extreme memory
+  wastage.  Now, when connections are placed on the stack, they sink
+  below existing connections that have more active objects.
+
+- There is a new pool-timeout database configuration option to specify that
+  connections unused after the given time interval should be garbage
+  collection.  This will provide a means of dealing with extra
+  connections that are created in rare circumstances and that would
+  consume an unreasonable amount of memory.
+
+- The Blob open method now supports a new mode, 'c', to open committed
+  data for reading as an ordinary file, rather than as a blob file.
+  The ordinary file may be used outside the current transaction and
+  even after the blob's database connection has been closed.
+
+- ClientStorage now provides blob cache management. When using
+  non-shared blob directories, you can set a target cache size and the
+  cache will periodically be reduced try to keep it below the target size.
+
+  The client blob directory layout has changed.  If you have existing
+  non-shared blob directories, you will have to remove them.
+
+- ZODB 3.9 ZEO clients can connect to ZODB 3.8 servers.  ZODB ZEO clients
+  from ZODB 3.2 on can connect to ZODB 3.9 servers.
+
+- When a ZEO cache is stale and would need verification, a
+  ZEO.interfaces.StaleCache event is published (to zope.event).
+  Applications may handle this event and take action such as exiting
+  the application without verifying the cache or starting cold.
+
+- There's a new convenience function, ZEO.DB, for creating databases
+  using ZEO Client Storages.  Just call ZEO.DB with the same arguments
+  you would otherwise pass to ZEO.ClientStorage.ClientStorage::
+
+    import ZEO
+    db = ZEO.DB(('some_host', 8200))
+
+- Object saves are a little faster
+
+- When configuring storages in a storage server, the storage name now
+  defaults to "1".  In the overwhelmingly common case that a single
+  storage, the name can now be omitted.
+
+- FileStorage now provides optional garbage collection.  A 'gc'
+  keyword option can be passed to the pack method.  A false value
+  prevents garbage collection.
+
+- The FileStorage constructor now provides a boolean pack_gc option,
+  which defaults to True, to control whether garbage collection is
+  performed when packing by default. This can be overridden with the
+  gc option to the pack method.
+
+  The ZConfig configuration for FileStorage now includes a pack-gc
+  option, corresponding to the pack_gc constructor argument.
+
+- The FileStorage constructor now has a packer keyword argument that
+  allows an alternative packer to be supplied.
+
+  The ZConfig configuration for FileStorage now includes a packer
+  option, corresponding to the packer constructor argument.
+
+- MappingStorage now supports multi-version concurrency control and
+  iteration and provides a better storage implementation example.
+
+- DemoStorage has a number of new features:
+
+  - The ability to use a separate storage, such as a file storage to
+    store changes
+
+  - Blob support
+
+  - Multi-version concurrency control and iteration
+
+  - Explicit support for demo-storage stacking via push and pop methods.
+
+- Wen calling ZODB.DB to create a database, you can now pass a file
+  name, rather than a storage to use a file storage.
+
+- Added support for copying and recovery of blob storages:
+
+  - Added a helper function, ZODB.blob.is_blob_record for testing whether
+    a data record is for a blob.  This can be used when iterating over a
+    storage to detect blob records so that blob data can be copied.
+
+    In the future, we may want to build this into a blob-aware
+    iteration interface, so that records get blob file attributes
+    automatically.
+
+  - Added the IBlobStorageRestoreable interfaces for blob storages
+    that support recovery via a restoreBlob method.
+
+  - Updated ZODB.blob.BlobStorage to implement
+    IBlobStorageRestoreable and to have a copyTransactionsFrom method
+    that also copies blob data.
+
+- New `ClientStorage` configuration option `drop_cache_rather_verify`.
+  If this option is true then the ZEO client cache is dropped instead of
+  the long (unoptimized) verification. For large caches, setting this
+  option can avoid effective down times in the order of hours when
+  the connection to the ZEO server was interrupted for a longer time.
+
+- Cleaned-up the storage iteration API and provided an iterator implementation
+  for ZEO.
+
+- Versions are no-longer supported.
+
+- Document conflict resolution (see ZODB/ConflictResolution.txt).
+
+- Support multi-database references in conflict resolution.
+
+- Make it possible to examine oid and (in some situations) database
+  name of persistent object references during conflict resolution.
+
+- Moved the 'transaction' module out of ZODB.
+  ZODB depends upon this module, but it must be installed separately.
+
+- ZODB installation now requires setuptools.
+
+- Added `offset` information to output of `fstail`
+  script. Added test harness for this script.
+
+- Added support for read-only, historical connections based
+  on datetimes or serials (TIDs).  See
+  src/ZODB/historical_connections.txt.
+
+- Removed the ThreadedAsync module.
+
+- Now depend on zc.lockfile
+
+Bugs Fixed
+----------
+
+- CVE-2009-2701: Fixed a vulnerability in ZEO storage servers when
+  blobs are available. Someone with write access to a ZEO server
+  configured to support blobs could read any file on the system
+  readable by the server process and remove any file removable by the
+  server process.
+
+- BTrees (and TreeSets) kept references to internal keys.
+  https://bugs.launchpad.net/zope3/+bug/294788
+
+- BTree Sets and TreeSets don't support the standard set add method.
+  (Now either add or the original insert method can be used to add an
+  object to a BTree-based set.)
+
+- The runzeo script didn't work without a configuration file.
+  (https://bugs.launchpad.net/zodb/+bug/410571)
+
+- Officially deprecated PersistentDict
+  (https://bugs.launchpad.net/zodb/+bug/400775)
+
+- Calling __setstate__ on a persistent object could under certain
+  uncommon cause the process to crash.
+  (https://bugs.launchpad.net/zodb/+bug/262158)
+
+- When committing transactions involving blobs to ClientStorages with
+  non-shared blob directories, a failure could occur in tpc_finish if
+  there was insufficient disk space to copy the blob file or if the
+  file wasn't available.  https://bugs.launchpad.net/zodb/+bug/224169
+
+- Savepoint blob data wasn't properly isolated. If multiple
+  simultaneous savepoints in separate transactions modified the same
+  blob, data from one savepoint would overwrite data for another.
+
+- Savepoint blob data wasn't cleaned up after a transaction abort.
+  https://bugs.launchpad.net/zodb/+bug/323067
+
+- Opening a blob with modes 'r+' or 'a' would fail when the blob had no
+  committed changes.
+
+- PersistentList's sort method did not allow passing of keyword parameters.
+  Changed its sort parameter list to match that of its (Python 2.4+)
+  UserList base class.
+
+- Certain ZEO server errors could cause a client to get into a state
+  where it couldn't commit transactions.
+  https://bugs.launchpad.net/zodb/+bug/374737
+
+- Fixed vulnerabilities in the ZEO network protocol that allow:
+
+  - CVE-2009-0668 Arbitrary Python code execution in ZODB ZEO storage servers
+  - CVE-2009-0669 Authentication bypass in ZODB ZEO storage servers
+
+  The vulnerabilities only apply if you are using ZEO to share a
+  database among multiple applications or application instances and if
+  untrusted clients are able to connect to your ZEO servers.
+
+- Fixed the setup test command.  It previously depended on private
+  functions in zope.testing.testrunner that don't exist any more.
+
+- ZEO client threads were unnamed, making it hard to debug thread
+  management.
+
+- ZEO protocol 2 support was broken.  This caused very old clients to
+  be unable to use new servers.
+
+- zeopack was less flexible than it was before.  -h should default to
+  local host.
+
+- The "lawn" layout was being selected by default if the root of
+  the blob directory happened to contain a hidden file or directory
+  such as ".svn".  Now hidden files and directories are ignored
+  when choosing the default layout.
+
+- BlobStorage was not compatible with MVCC storages because the
+  wrappers were being removed by each database connection.  Fixed.
+
+- Saving indexes for large file storages failed (with the error:
+  RuntimeError: maximum recursion depth exceeded).  This can cause a
+  FileStorage to fail to start because it gets an error trying to save
+  its index.
+
+- Sizes of new objects weren't added to the object cache size
+  estimation, causing the object-cache size limiting feature to let
+  the cache grow too large when many objects were added.
+
+- Deleted records weren't removed when packing file storages.
+
+- Fixed analyze.py and added test.
+
+- fixed Python 2.6 compatibility issue with ZEO/zeoserverlog.py
+
+- using hashlib.sha1 if available in order to avoid DeprecationWarning
+  under Python 2.6
+
+- made runzeo -h work
+
+- The monitor server didn't correctly report the actual number of
+  clients.
+
+- Packing could return spurious errors due to errors notifying
+  disconnected clients of new database size statistics.
+
+- Undo sometimes failed for FileStorages configured to support blobs.
+
+- Starting ClientStorages sometimes failed with non-new but empty
+  cache files.
+
+- The history method on ZEO clients failed.
+
+- Fix for bug #251037: Make packing of blob storages non-blocking.
+
+- Fix for bug #220856: Completed implementation of ZEO authentication.
+
+- Fix for bug #184057: Make initialisation of small ZEO client file cache
+  sizes not fail.
+
+- Fix for bug #184054: MappingStorage used to raise a KeyError during `load`
+  instead of a POSKeyError.
+
+- Fixed bug in Connection.TmpStore: load() would not defer to the backend
+  storage for loading blobs.
+
+- Fix for bug #181712: Make ClientStorage update `lastTransaction` directly
+  after connecting to a server, even when no cache verification is necessary.
+
+- Fixed bug in blob filesystem helper: the `isSecure` check was inverted.
+
+- Fixed bug in transaction buffer: a tuple was unpacked incorrectly in
+  `clear`.
+
+- Bugfix the situation in which comparing persistent objects (for
+  instance, as members in BTree set or keys of BTree) might cause data
+  inconsistency during conflict resolution.
+
+- Fixed bug 153316: persistent and BTrees were using `int`
+  for memory sizes which caused errors on x86_64 Intel Xeon machines
+  (using 64-bit Linux).
+
+- Fixed small bug that the Connection.isReadOnly method didn't
+  work after a savepoint.
+
+- Bug #98275: Made ZEO cache more tolerant when invalidating current
+  versions of objects.
+
+- Fixed a serious bug that could cause client I/O to stop
+  (hang). This was accompanied by a critical log message along the
+  lines of: "RuntimeError: dictionary changed size during iteration".
+
+- Fixed bug #127182: Blobs were subclassable which was not desired.
+
+- Fixed bug #126007: tpc_abort had untested code path that was
+  broken.
+
+- Fixed bug #129921: getSize() function in BlobStorage could not
+  deal with garbage files
+
+- Fixed bug in which MVCC would not work for blobs.
+
+- Fixed bug in ClientCache that occurred with objects larger than the total
+  cache size.
+
+- When an error occured attempting to lock a file and logging of said error was
+  enabled.
+
+- FileStorages previously saved indexes after a certain
+  number of writes.  This was done during the last phase of two-phase
+  commit, which made this critical phase more subject to errors than
+  it should have been.  Also, for large databases, saves were done so
+  infrequently as to be useless.  The feature was removed to reduce
+  the chance for errors during the last phase of two-phase commit.
+
+- File storages previously kept an internal object id to
+  transaction id mapping as an optimization. This mapping caused
+  excessive memory usage and failures during the last phase of
+  two-phase commit. This optimization has been removed.
+
+- Refactored handling of invalidations on ZEO clients to fix
+  a possible ordering problem for invalidation messages.
+
+- On many systems, it was impossible to create more than 32K
+  blobs. Added a new blob-directory layout to work around this
+  limitation.
+
+- Fixed bug that could lead to memory errors due to the use
+  of a Python dictionary for a mapping that can grow large.
+
+- Fixed bug #251037: Made packing of blob storages non-blocking.
+
+- Fixed a bug that could cause InvalidObjectReference errors
+  for objects that were explicitly added to a database if the object
+  was modified after a savepoint that added the object.
+
+- Fixed several bugs that caused ZEO cache corruption when connecting
+  to servers. These bugs affected both persistent and non-persistent caches.
+
+- Improved the the ZEO client shutdown support to try to
+  avoid spurious errors on exit, especially for scripts, such as zeopack.
+
+- Packing failed for databases containing cross-database references.
+
+- Cross-database references to databases with empty names
+  weren't constructed properly.
+
+- The zeo client cache used an excessive amount of memory, causing applications
+  with large caches to exhaust available memory.
+
+- Fixed a number of bugs in the handling of persistent ZEO caches:
+
+  - Cache records are written in several steps.  If a process exits
+    after writing begins and before it is finishes, the cache will be
+    corrupt on restart.  The way records are written was changed to
+    make cache record updates atomic.
+
+  - There was no lock file to prevent opening a cache multiple times
+    at once, which would lead to corruption.  Persistent caches now
+    use lock files, in the same way that file storages do.
+
+  - A bug in the cache-opening logic led to cache failure in the
+    unlikely event that a cache has no free blocks.
+
+- When using ZEO Client Storages, Errors occured when trying to store
+  objects too big to fit in the ZEO cache file.
+
+- Fixed bug in blob filesystem helper: the `isSecure` check was inverted.
+
+- Fixed bug in transaction buffer: a tuple was unpacked incorrectly in
+  `clear`.
+
+- Fixed bug in Connection.TmpStore: load() would not defer to the
+  back-end storage for loading blobs.
+
+- Fixed bug #190884: Wrong reference to `POSKeyError` caused NameError.
+
+- Completed implementation of ZEO authentication. This fixes issue 220856.
+
+
 What's new in ZODB 3.8.0
 ========================
 

Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-10-08 16:12:18 UTC (rev 117387)
+++ ZODB/trunk/src/CHANGES.txt	2010-10-08 17:25:16 UTC (rev 117388)
@@ -2,210 +2,45 @@
  Change History
 ================
 
-3.10.0b8 (2010-09-30)
-=====================
+3.10.0 (2010-10-08)
+===================
 
-Bugs fixed
-----------
+New Features
+------------
 
-- On some systems, using an empty string in a server address of a ZEO
-  client led to a socket error. Now, ZEO clients treat '' as an alias
-  for 'localhost'.
+- There are a number of performance enhancements for ZEO storage
+  servers.
 
-- When a pool timeout was specified for a database and old connections
-  were removed due to timing out, an error occured due to a bug in the
-  connection cleanup logic.
+- FileStorage indexes use a new format. They are saved and loaded much
+  faster and take less space. Old indexes can still be read, but new
+  indexes won't be readable by older versions of ZODB.
 
-- When mulri-database connections were no longer used and cleaned up,
-  their subconnections weren't cleaned up properly.
+- The API for undoing multiple transactions has changed.  To undo
+  multiple transactions in a single transaction, pass a list of
+  transaction identifiers to a database's undoMultiple method. Calling a
+  database's undo method multiple times in the same transaction now
+  raises an exception.
 
-- Changes to suppprt IPv6 broke a fix for a problem on Mac OS X that
-  could cause a server to stop accepting connections.
+- The ZEO protocol for undo has changed.  The only user-visible
+  consequence of this is that when ZODB 3.10 ZEO servers won't support
+  undo for older clients.
 
-3.10.0b7 (2010-09-28)
-=====================
+- The storage API (IStorage) has been tightened. Now, storages should
+  raise a StorageTransactionError when invalid transactions are passed
+  to tpc_begin, tpc_vote, or tpc_finish.
 
-Bugs fixed
-----------
+- ZEO clients (``ClientStorage`` instances) now work in forked processes,
+  including those created via ``multiprocessing.Process`` instances.
 
-- ZEO didn't work with IPv6 addrsses.
-  Added IPv6 support contributed by Martin v. Löwis.
+- Broken objects now provide the IBroken interface.
 
-- Changes in way that garbage collection treats dictionaries in Python
-  2.7 broke the object/connection cache implementation.
-  (https://bugs.launchpad.net/zodb/+bug/641481)
+- As a convenience, you can now pass an integer port as an address to
+  the ZEO ClientStorage constructor.
 
-- A file storage bug could cause ZEO clients to have incorrect
-  information about current object revisions after reconnecting to a
-  database server.
+- As a convenience, there's a new ``client`` function in the ZEO
+  package for constructing a ClientStorage instance.  It takes the
+  same arguments as the ClientStorage constructor.
 
-- Updated the 'repozo --kill-old-on-full' option to remove any '.index'
-  files corresponding to backups being removed.
-
-- When objects were added in savepoints and either the savepoint was
-  rolled back (https://bugs.launchpad.net/zodb/+bug/143560) or the
-  transaction was aborted
-  (https://mail.zope.org/pipermail/zodb-dev/2010-June/013488.html)
-  The objects' _p_oid and _p_jar variables weren't cleared, leading to
-  surprizing errors.
-
-- ZEO extension methods failed when a client reconnected to a
-  storage. (https://bugs.launchpad.net/zodb/+bug/143344)
-
-- Objects added in transactions that were later aborted could have
-  _p_changed still set (https://bugs.launchpad.net/zodb/+bug/615758).
-
-- Clarified the return Value for lastTransaction in the case when
-  there aren't any transactions.  Now a string of 8 nulls (aka "z64")
-  is specified.
-
-- When using multi-databases, cache-management operations on a
-  connection, cacheMinimize and cacheGC, weren't applied to
-  subconnections.
-
-- Setting _p_changed on a blob wo actually writing anything caused an
-  error. (https://bugs.launchpad.net/zodb/+bug/440234)
-
-- The verbose mode of the fstest was broken.
-  (https://bugs.launchpad.net/zodb/+bug/475996)
-
-- Object ids created in a savepoint that is rolled back wren't being
-  reused. (https://bugs.launchpad.net/zodb/+bug/588389)
-
-- Logrotation/repoening via a SIGUSR2 signal wasn't implemented.
-  (https://bugs.launchpad.net/zodb/+bug/143600)
-
-  (Untested on windows.)
-
-3.10.0b6 (2010-09-08)
-=====================
-
-Bugs fixed
-----------
-
-- Process exits or database closes could cause ZEO caches to have
-  incorrect data due to a problem in the way invalidations were processed.
-
-- Database connections didn't invalidate cache entries when conflict
-  errors were raised in response to checkCurrentSerialInTransaction
-  errors. Normally, this shouldn't be a problem, since there should be
-  pending invalidations for these oids which will cause the object to
-  be invalidated. There have been issues with ZEO persistent cache
-  management that have caused out of date data to remain in the cache.
-  (It's possible that the last of these were addressed in the
-  3.10.0b5.) Invalidating read data when there is a conflict error
-  provides some extra insurance.
-
-- The interface, ZODB.interfaces.IStorage was incorrect. The store
-  method should never return a sequence of oid and serial pairs.
-
-3.10.0b5 (2010-09-02)
-=====================
-
-Bugs fixed
-----------
-
-- Added a new API that allows applications to make sure that current
-  data are read. For example, with::
-
-    self._p_jar.readCurrent(ob)
-
-  A conflict error will be raised if the version of ob read by the
-  transaction isn't current when the transaction is committed.
-
-  Normally, ZODB only assures that objects read are consistent, but not
-  necessarily up to date.  Checking whether an object is up to date is
-  important when information read from one object is used to update
-  another.
-
-  BTrees are an important case of reading one object to update
-  another.  Internal nodes are read to decide which leave notes are
-  updated when a BTree is updated.  BTrees now use this new API to
-  make sure that internal nodes are up to date on updates.
-
-- Shutting down a process while committing a transaction could cause
-  ZEO client caches to have invalid data.  This, in turn caused stale
-  data to remain in the cache until it was updated.
-
-- Removed untested unsupported dbmstorage fossile.
-
-3.10.0b4 (2010-07-19)
-=====================
-
-Bugs fixed
-----------
-
-- When an integer too large to fit in a 32-bit integer was provided as
-  a 32-bit-integer BTree key or value on 64-bit machines, an
-  OverflowError was raised. Now a TypeError is raised.
-
-3.10.0b3 (2010-07-15)
-=====================
-
-Bugs fixed
-----------
-
-- A change in 3.10.0b2:
-
-  "DemoStorages didn't close their changes databases when they were
-   created temporarily (not passed to the constructor)."
-
-  Introduced a backward-compatibility problem for some applications.
-
-  This change was reverted.
-
-3.10.0b2 (2010-07-13)
-=====================
-
-Bugs fixed
-----------
-
-- Updating blobs in save points could cause spurious "invalidations
-  out of order" errors.  https://bugs.launchpad.net/zodb/+bug/509801
-
-  (Thanks to Christian Zagrodnick for chasing this down.)
-
-- When a demo storage push method was used to create a new demo
-  storage and the new storage was closed, the original was
-  (incorrectly) closed.
-
-- DemoStorages didn't close their changes databases when they were
-  created temporarily (not passed to the constructor).
-
-- Passing keys or values outside the range of 32-bit ints on 64-bit
-  platforms led to undetected overflow errors. Now these cases cause
-  Overflow errors to be raised.
-
-  https://bugs.launchpad.net/zodb/+bug/143237
-
-- There were numerous bugs in the ZEO cache tracing and analysys code.
-  Cache simulation, while not perfect, seems to be much more accurate
-  now than it was before.
-
-  The ZEO cache trace statistics and simulation scripts have been
-  given more descriptive names and moved to the ZEO scripts package.
-
-- If a ZEO client process was restarted while invalidating a ZEO cache
-  entry, the cache could be left in a stage when there is data marked
-  current that should be invalidated, leading to persistent conflict
-  errors.
-
-- Corrupted or invalid cache files prevented ZEO clients from
-  starting. Now, bad cache files are moved aside.
-
-- Invalidations of object records in ZEO caches, where the
-  invalidation transaction ids matched the cached transaction ids
-  should have been ignored.
-
-- Conflict errors didn't invalidate ZEO cache entries.
-
-
-3.10.0b1 (2010-05-18)
-=====================
-
-New Features
-------------
-
 - DemoStorages now accept constructor athuments, close_base_on_close
   and close_changes_on_close, to control whether underlying storages
   are closed when the DemoStorage is closed.
@@ -250,31 +85,27 @@
   iterator implementations should just raise StopIteration, which
   means they can now be implemented as generators.
 
-- The file-storage backup script, repozo, will now create a backup
-  index file if an output file name is given via the --output/-o
-  option.
-
-- The filestorage packer configuration option noe accepts calues of
+- The filestorage packer configuration option noe accepts values of
   the form ``modname:expression``, allowing the use of packer
   factories with options.
 
-Bugs Fixed
-----------
+- Added a new API that allows applications to make sure that current
+  data are read. For example, with::
 
-- BTree sets and tree sets didn't correctly check values passed to
-  update or to constructors, causing Python to exit under certain
-  circumstances.
+    self._p_jar.readCurrent(ob)
 
-3.10.0a2 (2010-05-04)
-=====================
+  A conflict error will be raised if the version of ob read by the
+  transaction isn't current when the transaction is committed.
 
-New Features
-------------
+  Normally, ZODB only assures that objects read are consistent, but not
+  necessarily up to date.  Checking whether an object is up to date is
+  important when information read from one object is used to update
+  another.
 
-- Added a '--kill-old-on-full' argument to the repozo backup options:
-  if passed, remove any older full or incremental backup files from the
-  repository after doing a full backup.
-  (https://bugs.launchpad.net/zope2/+bug/143158)
+  BTrees are an important case of reading one object to update
+  another.  Internal nodes are read to decide which leave notes are
+  updated when a BTree is updated.  BTrees now use this new API to
+  make sure that internal nodes are up to date on updates.
 
 - When transactions are aborted, new object ids allocated during the
   transaction are saved and used in subsequent transactions. This can
@@ -291,635 +122,115 @@
   clients corresponding to server log entries, especially when there
   are multiple clients originating from the same machine.
 
+- Improved ZEO server commit lock logging.  Now, locking activity is
+  logged at the debug level until the number of waiting lock requests
+  gets above 3.  Log at the critical level when the number of waiting
+  lock requests gets above 9.
+
+- The file-storage backup script, repozo, will now create a backup
+  index file if an output file name is given via the --output/-o
+  option.
+
+- Added a '--kill-old-on-full' argument to the repozo backup options:
+  if passed, remove any older full or incremental backup files from the
+  repository after doing a full backup.
+  (https://bugs.launchpad.net/zope2/+bug/143158)
+
 - The mkzeoinst script has been moved to a separate project:
 
     http://pypi.python.org/pypi/zope.mkzeoinstance
 
   and is no-longer included with ZODB.
 
-- Improved ZEO server commit lock logging.  Now, locking activity is
-  logged at the debug level until the number of waiting lock requests
-  gets above 3.  Log at the critical level when the number of waiting
-  lock requests gets above 9.
+- Removed untested unsupported dbmstorage fossile.
 
 - ZEO servers no longer log their pids in every log message. It's just
   not interesting. :)
 
-Bugs Fixed
+Bugs fixed
 ----------
 
-- Fixed bug in copying a BTrees.Length instance.
-  (https://bugs.launchpad.net/zodb/+bug/516653)
+- When a pool timeout was specified for a database and old connections
+  were removed due to timing out, an error occured due to a bug in the
+  connection cleanup logic.
 
-- Fixed bug in cPickleCache's byte size estimation logic.
-  (https://bugs.launchpad.net/zodb/+bug/533015)
+- When multi-database connections were no longer used and cleaned up,
+  their subconnections weren't cleaned up properly.
 
-- Fixed a serious bug that caused cache failures when run
-  with Python optimization turned on.
+- ZEO didn't work with IPv6 addrsses.
+  Added IPv6 support contributed by Martin v. Löwis.
 
-  https://bugs.launchpad.net/zodb/+bug/544305
+- A file storage bug could cause ZEO clients to have incorrect
+  information about current object revisions after reconnecting to a
+  database server.
 
-- When using using a ClientStorage in a Storage server, there was a
-  threading bug that caused clients to get disconnected.
+- Updated the 'repozo --kill-old-on-full' option to remove any '.index'
+  files corresponding to backups being removed.
 
-- Fixed a bug that caused savepoint rollback to not properly
-  set object state when objects implemented _p_invalidate methods
-  that reloaded ther state (unghostifiable objects).
+- ZEO extension methods failed when a client reconnected to a
+  storage. (https://bugs.launchpad.net/zodb/+bug/143344)
 
-  https://bugs.launchpad.net/zodb/+bug/428039
+- Clarified the return Value for lastTransaction in the case when
+  there aren't any transactions.  Now a string of 8 nulls (aka "z64")
+  is specified.
 
-- cross-database wekrefs weren't handled correctly.
+- Setting _p_changed on a blob wo actually writing anything caused an
+  error. (https://bugs.launchpad.net/zodb/+bug/440234)
 
-  https://bugs.launchpad.net/zodb/+bug/435547
+- The verbose mode of the fstest was broken.
+  (https://bugs.launchpad.net/zodb/+bug/475996)
 
-- Fixed some problems in ZEO server commit lock management.
+- Object ids created in a savepoint that is rolled back wren't being
+  reused. (https://bugs.launchpad.net/zodb/+bug/588389)
 
-- On Mac OS X, clients that connected and disconnected quickly could
-  cause a ZEO server to stop accepting connections, due to a failure
-  to catch errors in the initial part of the connection process.
+- Database connections didn't invalidate cache entries when conflict
+  errors were raised in response to checkCurrentSerialInTransaction
+  errors. Normally, this shouldn't be a problem, since there should be
+  pending invalidations for these oids which will cause the object to
+  be invalidated. There have been issues with ZEO persistent cache
+  management that have caused out of date data to remain in the cache.
+  (It's possible that the last of these were addressed in the
+  3.10.0b5.) Invalidating read data when there is a conflict error
+  provides some extra insurance.
 
-  The failure to properly handle exceptions while accepting
-  connections is potentially problematic on other platforms.
+- The interface, ZODB.interfaces.IStorage was incorrect. The store
+  method should never return a sequence of oid and serial pairs.
 
-  Fixes: https://bugs.launchpad.net/zodb/+bug/135108
+- When a demo storage push method was used to create a new demo
+  storage and the new storage was closed, the original was
+  (incorrectly) closed.
 
-3.10.0a1 (2010-02-08)
-=====================
+- There were numerous bugs in the ZEO cache tracing and analysis code.
+  Cache simulation, while not perfect, seems to be much more accurate
+  now than it was before.
 
-New Features
-------------
+  The ZEO cache trace statistics and simulation scripts have been
+  given more descriptive names and moved to the ZEO scripts package.
 
-- There are a number of performance enhancements for ZEO storage
-  servers.
+- BTree sets and tree sets didn't correctly check values passed to
+  update or to constructors, causing Python to exit under certain
+  circumstances.
 
-- FileStorage indexes use a new format. They are saved and loaded much
-  faster and take less space. Old indexes can still be read, but new
-  indexes won't be readable by older versions of ZODB.
+- Fixed bug in copying a BTrees.Length instance.
+  (https://bugs.launchpad.net/zodb/+bug/516653)
 
-- The API for undoing multiple transactions has changed.  To undo
-  multiple transactions in a single transaction, pass a list of
-  transaction identifiers to a database's undoMultiple method. Calling a
-  database's undo method multiple times in the same transaction now
-  raises an exception.
+- Fixed a serious bug that caused cache failures when run
+  with Python optimization turned on.
 
-- The ZEO protocol for undo has changed.  The only user-visible
-  consequence of this is that when ZODB 3.10 ZEO servers won't support
-  undo for older clients.
+  https://bugs.launchpad.net/zodb/+bug/544305
 
-- The storage API (IStorage) has been tightened. Now, storages should
-  raise a StorageTransactionError when invalid transactions are passed
-  to tpc_begin, tpc_vote, or tpc_finish.
+- When using using a ClientStorage in a Storage server, there was a
+  threading bug that caused clients to get disconnected.
 
-- ZEO clients (``ClientStorage`` instances) now work in forked processes,
-  including those created via ``multiprocessing.Process`` instances.
+- On Mac OS X, clients that connected and disconnected quickly could
+  cause a ZEO server to stop accepting connections, due to a failure
+  to catch errors in the initial part of the connection process.
 
-- Broken objects now provide the IBroken interface.
+  The failure to properly handle exceptions while accepting
+  connections is potentially problematic on other platforms.
 
-- As a convenience, you can now pass an integer port as an address to
-  the ZEO ClientStorage constructor.
+  Fixes: https://bugs.launchpad.net/zodb/+bug/135108
 
-- As a convenience, there's a new ``client`` function in the ZEO
-  package for constructing a ClientStorage instance.  It takes the
-  same arguments as the ClientStorage constructor.
-
-Bugs Fixed
-----------
-
 - Object state management wasn't done correctly when classes
   implemented custom _p_deavtivate methods.
   (https://bugs.launchpad.net/zodb/+bug/185066)
-
-3.9.4 (2009-12-14)
-==================
-
-Bugs Fixed
-----------
-
-- A ZEO threading bug could cause transactions to read inconsistent
-  data.  (This sometimes caused an AssertionError in
-  Connection._setstate_noncurrent.)
-
-- DemoStorage.loadBefore sometimes returned invalid data which
-  would trigger AssertionErrors in ZODB.Connection.
-
-- History support was broken when using stprages that work with ZODB
-  3.8 and 3.9.
-
-- zope.testing was an unnecessary non-testing dependency.
-
-- Internal ZEO errors were logged at the INFO level, rather
-  than at the error level.
-
-- The FileStorage backup and restore script, repozo, gave a
-  deprecation warning under Python 2.6.
-
-- C Header files weren't installed correctly.
-
-- The undo implementation was incorrect in ways that could cause
-  subtle missbehaviors.
-
-3.9.3 (2009-10-23)
-==================
-
-Bugs Fixed
-----------
-
-- 2 BTree bugs, introduced by a bug fix in 3.9.0c2, sometimes caused
-  deletion of keys to be improperly handled, resulting in data being
-  available via iteraation but not item access.
-
-3.9.2 (2009-10-13)
-==================
-
-Bugs Fixed
-----------
-
-- ZEO manages a separate thread for client network IO.  It created
-  this thread on import, which caused problems for applications that
-  implemented daemon behavior by forking.  Now, the client thread
-  isn't created until needed.
-
-- File-storage pack clean-up tasks that can take a long time
-  unnecessarily blocked other activity.
-
-- In certain rare situations, ZEO client connections would hang during
-  the initial connection setup.
-
-3.9.1 (2009-10-01)
-==================
-
-Bugs Fixed
-----------
-
-- Conflict errors committing blobs caused ZEO servers to stop committing
-  transactions.
-
-3.9.0 (2009-09-08)
-==================
-
-New Features (in more or less reverse chronological order)
-----------------------------------------------------------
-
-- The Database class now has an ``xrefs`` keyword argument and a
-  corresponding allow-implicit-cross-references configuration option.
-  which default to true.  When set to false, cross-database references
-  are disallowed.
-
-- Added support for RelStorage.
-
-- As a convenience, the connection root method for returning the root
-  object can now *also* be used as an object with attributes mapped to
-  the root-object keys.
-
-- Databases have a new method, ``transaction``, that can be used with the
-  Python (2.5 and later) ``with`` statement::
-
-     db = ZODB.DB(...)
-     with db.transaction() as conn:
-          # ... do stuff with conn
-
-  This uses a private transaction manager for the connection.
-  If control exits the block without an error, the transaction is
-  committed, otherwise, it is aborted.
-
-- Convenience functions ZODB.connection and ZEO.connection provide a
-  convenient way to open a connection to a database.  They open a
-  database and return a connection to it. When the connection is
-  closed, the database is closed as well.
-
-- The ZODB.config databaseFrom... methods now support
-  multi-databases. If multiple zodb sections are used to define
-  multiple databases, the databases are connected in a multi-database
-  arrangement and the first of the defined databases is returned.
-
-- The zeopack script has gotten a number of improvements:
-
-  - Simplified command-line interface. (The old interface is still
-    supported, except that support for ZEO version 1 servers has been
-    dropped.)
-
-  - Multiple storages can be packed in sequence.
-
-    - This simplifies pack scheduling on servers serving multiple
-      databases.
-
-    - All storages are packed to the same time.
-
-  - You can now specify a time of day to pack to.
-
-  - The script will now time out if it can't connect to s storage in
-    60 seconds.
-
-- The connection now estimates the object size based on its pickle size
-  and informs the cache about size changes.
-
-  The database got additional configurations options (`cache-size-bytes`
-  and `historical-cache-size-bytes`) to limit the
-  cache size based on the estimated total size of cached objects.
-  The default values are 0 which has the interpretation "do not limit
-  based on the total estimated size".
-  There are corresponding methods to read and set the new configuration
-  parameters.
-
-- Connections now have a public ``opened`` attribute that is true when
-  the connection is open, and false otherwise.  When true, it is the
-  seconds since the epoch (time.time()) when the connection was
-  opened. This is a renaming of the previous ``_opened`` private
-  variable.
-
-- FileStorage now supports blobs directly.
-
-- You can now control whether FileStorages keep .old files when packing.
-
-- POSKeyErrors are no longer logged by ZEO servers, because they are
-  really client errors.
-
-- A new storage interface, IExternalGC, to support external garbage
-  collection, http://wiki.zope.org/ZODB/ExternalGC, has been defined
-  and implemented for FileStorage and ClientStorage.
-
-- As a small convenience (mainly for tests), you can now specify
-  initial data as a string argument to the Blob constructor.
-
-- ZEO Servers now provide an option, invalidation-age, that allows
-  quick verification of ZEO clients have been disconnected for less
-  than a given time even if the number of transactions the client
-  hasn't seen exceeds the invalidation queue size. This is only
-  recommended if the storage being served supports efficient iteration
-  from a point near the end of the transaction history.
-
-- The FileStorage iterator now handles large files better.  When
-  iterating from a starting transaction near the end of the file, the
-  iterator will scan backward from the end of the file to find the
-  starting point.  This enhancement makes it practical to take
-  advantage of the new storage server invalidation-age option.
-
-- Previously, database connections were managed as a stack.  This
-  tended to cause the same connection(s) to be used over and over.
-  For example, the most used connection would typically be the only
-  connection used.  In some rare situations, extra connections could
-  be opened and end up on the top of the stack, causing extreme memory
-  wastage.  Now, when connections are placed on the stack, they sink
-  below existing connections that have more active objects.
-
-- There is a new pool-timeout database configuration option to specify that
-  connections unused after the given time interval should be garbage
-  collection.  This will provide a means of dealing with extra
-  connections that are created in rare circumstances and that would
-  consume an unreasonable amount of memory.
-
-- The Blob open method now supports a new mode, 'c', to open committed
-  data for reading as an ordinary file, rather than as a blob file.
-  The ordinary file may be used outside the current transaction and
-  even after the blob's database connection has been closed.
-
-- ClientStorage now provides blob cache management. When using
-  non-shared blob directories, you can set a target cache size and the
-  cache will periodically be reduced try to keep it below the target size.
-
-  The client blob directory layout has changed.  If you have existing
-  non-shared blob directories, you will have to remove them.
-
-- ZODB 3.9 ZEO clients can connect to ZODB 3.8 servers.  ZODB ZEO clients
-  from ZODB 3.2 on can connect to ZODB 3.9 servers.
-
-- When a ZEO cache is stale and would need verification, a
-  ZEO.interfaces.StaleCache event is published (to zope.event).
-  Applications may handle this event and take action such as exiting
-  the application without verifying the cache or starting cold.
-
-- There's a new convenience function, ZEO.DB, for creating databases
-  using ZEO Client Storages.  Just call ZEO.DB with the same arguments
-  you would otherwise pass to ZEO.ClientStorage.ClientStorage::
-
-    import ZEO
-    db = ZEO.DB(('some_host', 8200))
-
-- Object saves are a little faster
-
-- When configuring storages in a storage server, the storage name now
-  defaults to "1".  In the overwhelmingly common case that a single
-  storage, the name can now be omitted.
-
-- FileStorage now provides optional garbage collection.  A 'gc'
-  keyword option can be passed to the pack method.  A false value
-  prevents garbage collection.
-
-- The FileStorage constructor now provides a boolean pack_gc option,
-  which defaults to True, to control whether garbage collection is
-  performed when packing by default. This can be overridden with the
-  gc option to the pack method.
-
-  The ZConfig configuration for FileStorage now includes a pack-gc
-  option, corresponding to the pack_gc constructor argument.
-
-- The FileStorage constructor now has a packer keyword argument that
-  allows an alternative packer to be supplied.
-
-  The ZConfig configuration for FileStorage now includes a packer
-  option, corresponding to the packer constructor argument.
-
-- MappingStorage now supports multi-version concurrency control and
-  iteration and provides a better storage implementation example.
-
-- DemoStorage has a number of new features:
-
-  - The ability to use a separate storage, such as a file storage to
-    store changes
-
-  - Blob support
-
-  - Multi-version concurrency control and iteration
-
-  - Explicit support for demo-storage stacking via push and pop methods.
-
-- Wen calling ZODB.DB to create a database, you can now pass a file
-  name, rather than a storage to use a file storage.
-
-- Added support for copying and recovery of blob storages:
-
-  - Added a helper function, ZODB.blob.is_blob_record for testing whether
-    a data record is for a blob.  This can be used when iterating over a
-    storage to detect blob records so that blob data can be copied.
-
-    In the future, we may want to build this into a blob-aware
-    iteration interface, so that records get blob file attributes
-    automatically.
-
-  - Added the IBlobStorageRestoreable interfaces for blob storages
-    that support recovery via a restoreBlob method.
-
-  - Updated ZODB.blob.BlobStorage to implement
-    IBlobStorageRestoreable and to have a copyTransactionsFrom method
-    that also copies blob data.
-
-- New `ClientStorage` configuration option `drop_cache_rather_verify`.
-  If this option is true then the ZEO client cache is dropped instead of
-  the long (unoptimized) verification. For large caches, setting this
-  option can avoid effective down times in the order of hours when
-  the connection to the ZEO server was interrupted for a longer time.
-
-- Cleaned-up the storage iteration API and provided an iterator implementation
-  for ZEO.
-
-- Versions are no-longer supported.
-
-- Document conflict resolution (see ZODB/ConflictResolution.txt).
-
-- Support multi-database references in conflict resolution.
-
-- Make it possible to examine oid and (in some situations) database
-  name of persistent object references during conflict resolution.
-
-- Moved the 'transaction' module out of ZODB.
-  ZODB depends upon this module, but it must be installed separately.
-
-- ZODB installation now requires setuptools.
-
-- Added `offset` information to output of `fstail`
-  script. Added test harness for this script.
-
-- Added support for read-only, historical connections based
-  on datetimes or serials (TIDs).  See
-  src/ZODB/historical_connections.txt.
-
-- Removed the ThreadedAsync module.
-
-- Now depend on zc.lockfile
-
-Bugs Fixed
-----------
-
-- CVE-2009-2701: Fixed a vulnerability in ZEO storage servers when
-  blobs are available. Someone with write access to a ZEO server
-  configured to support blobs could read any file on the system
-  readable by the server process and remove any file removable by the
-  server process.
-
-- BTrees (and TreeSets) kept references to internal keys.
-  https://bugs.launchpad.net/zope3/+bug/294788
-
-- BTree Sets and TreeSets don't support the standard set add method.
-  (Now either add or the original insert method can be used to add an
-  object to a BTree-based set.)
-
-- The runzeo script didn't work without a configuration file.
-  (https://bugs.launchpad.net/zodb/+bug/410571)
-
-- Officially deprecated PersistentDict
-  (https://bugs.launchpad.net/zodb/+bug/400775)
-
-- Calling __setstate__ on a persistent object could under certain
-  uncommon cause the process to crash.
-  (https://bugs.launchpad.net/zodb/+bug/262158)
-
-- When committing transactions involving blobs to ClientStorages with
-  non-shared blob directories, a failure could occur in tpc_finish if
-  there was insufficient disk space to copy the blob file or if the
-  file wasn't available.  https://bugs.launchpad.net/zodb/+bug/224169
-
-- Savepoint blob data wasn't properly isolated. If multiple
-  simultaneous savepoints in separate transactions modified the same
-  blob, data from one savepoint would overwrite data for another.
-
-- Savepoint blob data wasn't cleaned up after a transaction abort.
-  https://bugs.launchpad.net/zodb/+bug/323067
-
-- Opening a blob with modes 'r+' or 'a' would fail when the blob had no
-  committed changes.
-
-- PersistentList's sort method did not allow passing of keyword parameters.
-  Changed its sort parameter list to match that of its (Python 2.4+)
-  UserList base class.
-
-- Certain ZEO server errors could cause a client to get into a state
-  where it couldn't commit transactions.
-  https://bugs.launchpad.net/zodb/+bug/374737
-
-- Fixed vulnerabilities in the ZEO network protocol that allow:
-
-  - CVE-2009-0668 Arbitrary Python code execution in ZODB ZEO storage servers
-  - CVE-2009-0669 Authentication bypass in ZODB ZEO storage servers
-
-  The vulnerabilities only apply if you are using ZEO to share a
-  database among multiple applications or application instances and if
-  untrusted clients are able to connect to your ZEO servers.
-
-- Fixed the setup test command.  It previously depended on private
-  functions in zope.testing.testrunner that don't exist any more.
-
-- ZEO client threads were unnamed, making it hard to debug thread
-  management.
-
-- ZEO protocol 2 support was broken.  This caused very old clients to
-  be unable to use new servers.
-
-- zeopack was less flexible than it was before.  -h should default to
-  local host.
-
-- The "lawn" layout was being selected by default if the root of
-  the blob directory happened to contain a hidden file or directory
-  such as ".svn".  Now hidden files and directories are ignored
-  when choosing the default layout.
-
-- BlobStorage was not compatible with MVCC storages because the
-  wrappers were being removed by each database connection.  Fixed.
-
-- Saving indexes for large file storages failed (with the error:
-  RuntimeError: maximum recursion depth exceeded).  This can cause a
-  FileStorage to fail to start because it gets an error trying to save
-  its index.
-
-- Sizes of new objects weren't added to the object cache size
-  estimation, causing the object-cache size limiting feature to let
-  the cache grow too large when many objects were added.
-
-- Deleted records weren't removed when packing file storages.
-
-- Fixed analyze.py and added test.
-
-- fixed Python 2.6 compatibility issue with ZEO/zeoserverlog.py
-
-- using hashlib.sha1 if available in order to avoid DeprecationWarning
-  under Python 2.6
-
-- made runzeo -h work
-
-- The monitor server didn't correctly report the actual number of
-  clients.
-
-- Packing could return spurious errors due to errors notifying
-  disconnected clients of new database size statistics.
-
-- Undo sometimes failed for FileStorages configured to support blobs.
-
-- Starting ClientStorages sometimes failed with non-new but empty
-  cache files.
-
-- The history method on ZEO clients failed.
-
-- Fix for bug #251037: Make packing of blob storages non-blocking.
-
-- Fix for bug #220856: Completed implementation of ZEO authentication.
-
-- Fix for bug #184057: Make initialisation of small ZEO client file cache
-  sizes not fail.
-
-- Fix for bug #184054: MappingStorage used to raise a KeyError during `load`
-  instead of a POSKeyError.
-
-- Fixed bug in Connection.TmpStore: load() would not defer to the backend
-  storage for loading blobs.
-
-- Fix for bug #181712: Make ClientStorage update `lastTransaction` directly
-  after connecting to a server, even when no cache verification is necessary.
-
-- Fixed bug in blob filesystem helper: the `isSecure` check was inverted.
-
-- Fixed bug in transaction buffer: a tuple was unpacked incorrectly in
-  `clear`.
-
-- Bugfix the situation in which comparing persistent objects (for
-  instance, as members in BTree set or keys of BTree) might cause data
-  inconsistency during conflict resolution.
-
-- Fixed bug 153316: persistent and BTrees were using `int`
-  for memory sizes which caused errors on x86_64 Intel Xeon machines
-  (using 64-bit Linux).
-
-- Fixed small bug that the Connection.isReadOnly method didn't
-  work after a savepoint.
-
-- Bug #98275: Made ZEO cache more tolerant when invalidating current
-  versions of objects.
-
-- Fixed a serious bug that could cause client I/O to stop
-  (hang). This was accompanied by a critical log message along the
-  lines of: "RuntimeError: dictionary changed size during iteration".
-
-- Fixed bug #127182: Blobs were subclassable which was not desired.
-
-- Fixed bug #126007: tpc_abort had untested code path that was
-  broken.
-
-- Fixed bug #129921: getSize() function in BlobStorage could not
-  deal with garbage files
-
-- Fixed bug in which MVCC would not work for blobs.
-
-- Fixed bug in ClientCache that occurred with objects larger than the total
-  cache size.
-
-- When an error occured attempting to lock a file and logging of said error was
-  enabled.
-
-- FileStorages previously saved indexes after a certain
-  number of writes.  This was done during the last phase of two-phase
-  commit, which made this critical phase more subject to errors than
-  it should have been.  Also, for large databases, saves were done so
-  infrequently as to be useless.  The feature was removed to reduce
-  the chance for errors during the last phase of two-phase commit.
-
-- File storages previously kept an internal object id to
-  transaction id mapping as an optimization. This mapping caused
-  excessive memory usage and failures during the last phase of
-  two-phase commit. This optimization has been removed.
-
-- Refactored handling of invalidations on ZEO clients to fix
-  a possible ordering problem for invalidation messages.
-
-- On many systems, it was impossible to create more than 32K
-  blobs. Added a new blob-directory layout to work around this
-  limitation.
-
-- Fixed bug that could lead to memory errors due to the use
-  of a Python dictionary for a mapping that can grow large.
-
-- Fixed bug #251037: Made packing of blob storages non-blocking.
-
-- Fixed a bug that could cause InvalidObjectReference errors
-  for objects that were explicitly added to a database if the object
-  was modified after a savepoint that added the object.
-
-- Fixed several bugs that caused ZEO cache corruption when connecting
-  to servers. These bugs affected both persistent and non-persistent caches.
-
-- Improved the the ZEO client shutdown support to try to
-  avoid spurious errors on exit, especially for scripts, such as zeopack.
-
-- Packing failed for databases containing cross-database references.
-
-- Cross-database references to databases with empty names
-  weren't constructed properly.
-
-- The zeo client cache used an excessive amount of memory, causing applications
-  with large caches to exhaust available memory.
-
-- Fixed a number of bugs in the handling of persistent ZEO caches:
-
-  - Cache records are written in several steps.  If a process exits
-    after writing begins and before it is finishes, the cache will be
-    corrupt on restart.  The way records are written was changed to
-    make cache record updates atomic.
-
-  - There was no lock file to prevent opening a cache multiple times
-    at once, which would lead to corruption.  Persistent caches now
-    use lock files, in the same way that file storages do.
-
-  - A bug in the cache-opening logic led to cache failure in the
-    unlikely event that a cache has no free blocks.
-
-- When using ZEO Client Storages, Errors occured when trying to store
-  objects too big to fit in the ZEO cache file.
-
-- Fixed bug in blob filesystem helper: the `isSecure` check was inverted.
-
-- Fixed bug in transaction buffer: a tuple was unpacked incorrectly in
-  `clear`.
-
-- Fixed bug in Connection.TmpStore: load() would not defer to the
-  back-end storage for loading blobs.
-
-- Fixed bug #190884: Wrong reference to `POSKeyError` caused NameError.
-
-- Completed implementation of ZEO authentication. This fixes issue 220856.



More information about the Zodb-checkins mailing list