
1.4.0 (2010-09-30)
------------------

- Made compatible with ZODB 3.10.0b7.

- Enabled ketama and compression in pylibmc_wrapper.  Both options
  are better for clusters.  [Helge Tesdal]

- Oracle: Use a more optimal query for POSKeyError logging.  [Helge Tesdal]

- Fixed a NameError that occurred when getting the history of an
  object where transaction extended info was set.  [Helge Tesdal]


1.4.0c4 (2010-09-17)
--------------------

- Worked around an Oracle RAC bug: apparently, in a RAC environment,
  the read-only transaction mode does not isolate transactions in the
  manner specified by the documentation, so Oracle users now have to
  use serializable isolation like everyone else. It's slower but more
  reliable.

- Use the client time instead of the database server time as a factor
  in the transaction ID.  RelStorage was using the database server time
  to reduce the need for synchronized clocks, but in practice, that
  policy broke tests and did not really avoid the need to synchronize
  clocks.  Also, the effect of unsynchronized clocks is predictable
  and manageable: you'll get bunches of transactions with sequential
  timestamps.

- If the database returns an object from the future (which should never
  happen), generate a ReadConflictError, hopefully giving the application
  a chance to recover.  The most likely causes of this are a broken
  database and threading bugs.

1.4.0c3 (2010-07-31)
--------------------

- Always update the RelStorage cache when opening a database connection for
  loading, even when no ZODB Connection is using the storage.  Otherwise,
  code that used the storage interface directly could cause the cache
  to fall out of sync; the effects would be seen in the next
  ZODB.Connection.

- Added a ZODB monkey patch that passes the "force" parameter to the
  sync method.  This should help the poll-interval option do its job
  better.

1.4.0c2 (2010-07-28)
--------------------

- Fixed a subtle bug in the cache code that could lead to an
  AssertionError indicating a cache inconsistency.  The inconsistency
  was caused by after_poll(), which was ignoring the randomness of
  the order of the list of recent changes, leading it to sometimes
  put the wrong transfer ID in the "delta_after" dicts.  Also expanded
  the AssertionError with debugging info, since cache inconsistency
  can still be caused by database misconfiguration and mismatched
  client versions.

- Oracle: updated the migration notes.  The relstorage_util package
  is not needed after all.

1.4.0c1 (2010-06-19)
--------------------

- History-preserving storages now replace objects on restore instead of
  just inserting them.  This should solve problems people were
  having with the zodbconvert utility.

- Oracle: call the DBMS_LOCK.REQUEST function directly instead of using
  a small package named ``relstorage_util``. The ``relstorage_util``
  package was designed as a secure way to access the DBMS_LOCK package,
  but the package turned out to be confusing to DBAs and provided no
  real security advantage.  People who have already deployed
  RelStorage 1.4.x on Oracle need to do the following:

      GRANT EXECUTE ON DBMS_LOCK TO <zodb_user>;

  You can also drop the ``relstorage_util`` package.  Keep the
  ``relstorage_op`` package.

- Made compatible with ZODB 3.10.

- MySQL: specify the transaction isolation mode for every connection,
  since the default is apparently not necessarily "read committed"
  anymore.

1.4.0b3 (2010-02-02)
--------------------

- Auto-reconnect in new_oid().

1.4.0b2 (2010-01-30)
--------------------

- Include all test subpackages in setup.py.

- Raise an error if MySQL reverts to MyISAM rather than using the InnoDB
  storage engine.

1.4.0b1 (2009-11-17)
--------------------

- Added the keep-history option. Set it to false to keep no history.
  (Packing is still required for garbage collection and blob deletion.)

- Added the replica-conf and replica-timeout options.  Set replica-conf
  to a filename containing the location of database replicas.  Changes
  to the file take effect at transaction boundaries.

- Expanded the option documentation in README.txt.

- Revised the way RelStorage uses memcached.  Minimized the number of
  trips to both the cache server and the database.

- Added an in-process pickle cache that serves a function similar to the
  ZEO cache.

- Added a wrapper module for pylibmc.

- Store operations now use multi-insert and multi-delete SQL
  statements to reduce the effect of network latency.

- Renamed relstorage.py to storage.py to overcome import issues.
  Also moved the Options class to options.py.

- Updated the patch for ZODB 3.7 and 3.8 to fix an issue with
  blobs and subtransactions.

- Divided the implementation of database adapters into many small
  objects, making the adapter code more modular.  Added interfaces
  that describe the duties of each part.

- Oracle: Sped up restore operations by sending short blobs inline.

- Oracle: Use a timeout on commit locks.  This requires installation
  of a small PL/SQL package that can access DBMS_LOCK.  See README.txt.

- Oracle: Used PL/SQL bulk insert operations to improve write
  performance.

- PostgreSQL: use the documented ALTER SEQUENCE RESTART WITH
  statement instead of ALTER SEQUENCE START WITH.

- Moved MD5 sum computation to the adapters so they can choose not
  to use MD5.

- Changed loadSerial to load from the store connection only if the
  load connection can not provide the object requested.

- Stopped wrapping database disconnect exceptions.  Now the code
  catches and handles them directly.

- Use the store connection rather than the load connection for OID
  allocation.

- Detect and handle backward time travel, which can happen after
  failover to an out-of-date asynchronous slave database. For
  simplicity, invalidate the whole ZODB cache when this happens.

- Replaced the speed test script with a separately distributed package,
  ``zodbshootout``.

- Added the ``zodbpack`` script.

1.3.0b1 (2009-09-04)
--------------------

- Added support for a blob directory. No BlobStorage wrapper is needed.
  Cluster nodes will need to use a shared filesystem such as NFS or
  SMB/CIFS.

- Added the blob-dir parameter to the ZConfig schema and README.txt.


1.2.0 (2009-09-04)
------------------

- In Oracle, trim transaction descriptions longer than 2000 bytes.

- When opening the database for the first time, don't issue a warning
  about the inevitable POSKeyError on the root OID.

- If RelStorage tries to unpickle a corrupt object state during packing,
  it will now report the oid and tid in the log.


1.2.0b2 (2009-05-05)
--------------------

- RelStorage now implements IMVCCStorage, making it compatible with
  ZODB 3.9.0b1 and above.

- Removed two-phase commit support from the PostgreSQL adapter. The
  feature turned out to be unnecessary.

- Added MySQL 5.1.34 and above to the list of supportable databases.

- Fixed minor test failures under Windows. Windows is now a supportable
  platform.
