CHANGES.txt 20 KB
Newer Older
Michael Howitz's avatar
Michael Howitz committed
1 2 3
================
 Change History
================
4

5 6 7 8 9 10 11 12 13
3.9.5 (unreleased)
==================

Bugs Fixed
----------

- Fixed bug in cPickleCache's byte size estimation logic.
  (https://bugs.launchpad.net/zodb/+bug/533015)

Jim Fulton's avatar
Jim Fulton committed
14
3.9.4 (2009-12-14)
Jim Fulton's avatar
Jim Fulton committed
15 16 17 18 19
==================

Bugs Fixed
----------

Jim Fulton's avatar
Jim Fulton committed
20 21 22 23
- A ZEO threading bug could cause transactions to read inconsistent
  data.  (This sometimes caused an AssertionError in
  Connection._setstate_noncurrent.)

24 25 26
- DemoStorage.loadBefore sometimes returned invalid data which
  would trigger AssertionErrors in ZODB.Connection.

Jim Fulton's avatar
Jim Fulton committed
27
- History support was broken when using stprages that work with ZODB
Jim Fulton's avatar
Jim Fulton committed
28
  3.8 and 3.9.
Jim Fulton's avatar
Jim Fulton committed
29

Jim Fulton's avatar
Jim Fulton committed
30
- zope.testing was an unnecessary non-testing dependency.
Jim Fulton's avatar
Jim Fulton committed
31

32 33 34
- Internal ZEO errors were logged at the INFO level, rather
  than at the error level.

35 36 37
- The FileStorage backup and restore script, repozo, gave a
  deprecation warning under Python 2.6.

38 39
- C Header files weren't installed correctly.

Jim Fulton's avatar
Jim Fulton committed
40
3.9.3 (2009-10-23)
Jim Fulton's avatar
Jim Fulton committed
41 42 43 44 45 46 47 48 49
==================

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.

Jim Fulton's avatar
Jim Fulton committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
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 hand during
  the initial connection setup.

Jim Fulton's avatar
Jim Fulton committed
67
3.9.1 (2009-10-01)
68 69 70 71 72
==================

Bugs Fixed
----------

Jim Fulton's avatar
Jim Fulton committed
73
- Conflict errors committing blobs caused ZEO servers to stop committing
74 75
  transactuions.

76 77
3.9.0 (2009-09-08)
==================
78

Jim Fulton's avatar
Jim Fulton committed
79 80
New Features (in more or less reverse chronological order)
----------------------------------------------------------
Jim Fulton's avatar
Jim Fulton committed
81

Jim Fulton's avatar
Jim Fulton committed
82 83 84 85 86
- 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.

87 88 89
- Added support for RelStorage.

- As a convenience, the connection root method for returning the root
90 91 92
  object can now *also* be used as an object with attributes mapped to
  the root-object keys.

Jim Fulton's avatar
Jim Fulton committed
93 94
- Databases have a new method, ``transaction``, that can be used with the
  Python (2.5 and later) ``with`` statement::
95 96 97 98 99 100

     db = ZODB.DB(...)
     with db.transaction() as conn:
          # ... do stuff with conn

  This uses a private transaction manager for the connection.
Jim Fulton's avatar
Jim Fulton committed
101
  If control exits the block without an error, the transaction is
102 103
  committed, otherwise, it is aborted.

Jim Fulton's avatar
Jim Fulton committed
104
- Convenience functions ZODB.connection and ZEO.connection provide a
105 106 107 108
  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.

Jim Fulton's avatar
Jim Fulton committed
109 110 111 112 113
- 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.

Andreas Jung's avatar
typo  
Andreas Jung committed
114
- The zeopack script has gotten a number of improvements:
Jim Fulton's avatar
Jim Fulton committed
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131

  - 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.

132 133 134 135 136 137 138 139 140 141 142
- 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.

143 144 145 146 147 148
- 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.

149 150
- FileStorage now supports blobs directly.

151 152
- You can now control whether FileStorages keep .old files when packing.

153 154 155
- POSKeyErrors are no longer logged by ZEO servers, because they are
  really client errors.

156 157
- A new storage interface, IExternalGC, to support external garbage
  collection, http://wiki.zope.org/ZODB/ExternalGC, has been defined
158
  and implemented for FileStorage and ClientStorage.
159 160 161 162

- As a small convenience (mainly for tests), you can now specify
  initial data as a string argument to the Blob constructor.

163
- ZEO Servers now provide an option, invalidation-age, that allows
Jim Fulton's avatar
Jim Fulton committed
164 165 166 167 168
  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.
169 170

- The FileStorage iterator now handles large files better.  When
Jim Fulton's avatar
Jim Fulton committed
171
  iterating from a starting transaction near the end of the file, the
172
  iterator will scan backward from the end of the file to find the
173 174
  starting point.  This enhancement makes it practical to take
  advantage of the new storage server invalidation-age option.
175

176 177
- Previously, database connections were managed as a stack.  This
  tended to cause the same connection(s) to be used over and over.
Jim Fulton's avatar
Jim Fulton committed
178
  For example, the most used connection would typically be the only
179 180 181 182 183
  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.

184 185
- There is a new pool-timeout database configuration option to specify that
  connections unused after the given time interval should be garbage
Jim Fulton's avatar
Jim Fulton committed
186
  collection.  This will provide a means of dealing with extra
187 188 189
  connections that are created in rare circumstances and that would
  consume an unreasonable amount of memory.

190 191 192 193 194
- 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.

195 196
- ClientStorage now provides blob cache management. When using
  non-shared blob directories, you can set a target cache size and the
Jim Fulton's avatar
Jim Fulton committed
197
  cache will periodically be reduced try to keep it below the target size.
198 199

  The client blob directory layout has changed.  If you have existing
200
  non-shared blob directories, you will have to remove them.
201

Jim Fulton's avatar
Jim Fulton committed
202 203
- 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.
204

Jim Fulton's avatar
Updated  
Jim Fulton committed
205 206 207 208 209
- 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.

210 211 212 213 214
- 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
215
    db = ZEO.DB(('some_host', 8200))
216

217 218
- Object saves are a little faster

Jim Fulton's avatar
Jim Fulton committed
219 220
- When configuring storages in a storage server, the storage name now
  defaults to "1".  In the overwhelmingly common case that a single
Jim Fulton's avatar
Jim Fulton committed
221
  storage, the name can now be omitted.
Jim Fulton's avatar
Jim Fulton committed
222

223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
- 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.

241 242 243 244 245 246 247 248 249 250 251 252
- 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

Jim Fulton's avatar
Jim Fulton committed
253
  - Explicit support for demo-storage stacking via push and pop methods.
Jim Fulton's avatar
Jim Fulton committed
254

Jim Fulton's avatar
Jim Fulton committed
255 256 257
- Wen calling ZODB.DB to create a database, you can now pass a file
  name, rather than a storage to use a file storage.

258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
- 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.

275 276 277
- 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
Jim Fulton's avatar
Jim Fulton committed
278
  option can avoid effective down times in the order of hours when
279 280
  the connection to the ZEO server was interrupted for a longer time.

281 282 283
- Cleaned-up the storage iteration API and provided an iterator implementation
  for ZEO.

284 285 286 287
- Versions are no-longer supported.

- Document conflict resolution (see ZODB/ConflictResolution.txt).

Jim Fulton's avatar
Jim Fulton committed
288
- Support multi-database references in conflict resolution.
289 290 291 292

- Make it possible to examine oid and (in some situations) database
  name of persistent object references during conflict resolution.

Jim Fulton's avatar
Jim Fulton committed
293
- Moved the 'transaction' module out of ZODB.
294 295 296 297 298 299 300 301 302 303 304
  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.

305 306
- Removed the ThreadedAsync module.

307 308
- Now depend on zc.lockfile

309 310 311
Bugs Fixed
----------

312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398
- 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.

- 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.

Jim Fulton's avatar
Jim Fulton committed
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418
- 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.

419 420
- Fix for bug #251037: Make packing of blob storages non-blocking.

Christian Theune's avatar
typo  
Christian Theune committed
421
- Fix for bug #220856: Completed implementation of ZEO authentication.
422

423 424 425
- Fix for bug #184057: Make initialisation of small ZEO client file cache
  sizes not fail.

426 427 428
- Fix for bug #184054: MappingStorage used to raise a KeyError during `load`
  instead of a POSKeyError.

429 430 431
- Fixed bug in Connection.TmpStore: load() would not defer to the backend
  storage for loading blobs.

432 433 434
- Fix for bug #181712: Make ClientStorage update `lastTransaction` directly
  after connecting to a server, even when no cache verification is necessary.

Jim Fulton's avatar
Jim Fulton committed
435
- Fixed bug in blob filesystem helper: the `isSecure` check was inverted.
436

437 438 439
- Fixed bug in transaction buffer: a tuple was unpacked incorrectly in
  `clear`.

440 441 442 443 444 445 446
- 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).
447

448 449 450 451 452 453 454
- 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
Jim Fulton's avatar
Jim Fulton committed
455
  (hang). This was accompanied by a critical log message along the
456 457 458 459 460 461 462 463 464 465 466
  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.
467 468 469

- Fixed bug in ClientCache that occurred with objects larger than the total
  cache size.
Jim Fulton's avatar
Updated  
Jim Fulton committed
470

471 472 473
- When an error occured attempting to lock a file and logging of said error was
  enabled.

474 475 476 477 478 479 480 481 482 483 484 485
- 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.

Jim Fulton's avatar
Jim Fulton committed
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
- 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
503
  to servers. These bugs affected both persistent and non-persistent caches.
Jim Fulton's avatar
Jim Fulton committed
504 505 506 507 508 509

- 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.

Jim Fulton's avatar
Updated  
Jim Fulton committed
510 511 512
- Cross-database references to databases with empty names
  weren't constructed properly.

Jim Fulton's avatar
Jim Fulton committed
513
- The zeo client cache used an excessive amount of memory, causing applications
514
  with large caches to exhaust available memory.
Jim Fulton's avatar
Updated  
Jim Fulton committed
515 516 517 518 519

- 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
Jim Fulton's avatar
Jim Fulton committed
520
    corrupt on restart.  The way records are written was changed to
Jim Fulton's avatar
Updated  
Jim Fulton committed
521 522 523 524 525 526 527 528 529 530 531 532
    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.

Jim Fulton's avatar
Jim Fulton committed
533
- Fixed bug in blob filesystem helper: the `isSecure` check was inverted.
Jim Fulton's avatar
Updated  
Jim Fulton committed
534 535 536 537 538

- Fixed bug in transaction buffer: a tuple was unpacked incorrectly in
  `clear`.

- Fixed bug in Connection.TmpStore: load() would not defer to the
Jim Fulton's avatar
Jim Fulton committed
539
  back-end storage for loading blobs.
Jim Fulton's avatar
Updated  
Jim Fulton committed
540 541 542 543

- Fixed bug #190884: Wrong reference to `POSKeyError` caused NameError.

- Completed implementation of ZEO authentication. This fixes issue 220856.