====
TODO
====

1.0
===

Stabilization
-------------

- Disallow packing while a storage is recovering.

- Disallow recovering multiple storages in parallel.

Cleanup
-------

- XXX review

- reduce superfluous logging output from tests

Future
======

- Allow asynchronous backend storages (e.g. for off-site replication)

- Make write access to backend storages parallel (for better write
  performance).

- Balance read requests over varying backends to optimize caching and
  distribute IO load. (Beware of the hard-coded priority queue that we use for
  packing.)

- Allow online reconfiguration of the RAID storage (e.g. for adding or
  removing new backend servers).

- Verify parallel/backend invalidations + optimize invalidations that they get
  passed on only once.

- Guarantee a recovery rate larger than the rate of new commits (one idea is
  to use a "credit point system").

- Document intention of tests better.

- Allow ZEORaid to startup `quickly` even when a backend zeo server is not
  available (thread-parallelize the opening of storages?)

- When recovering a non-shared blob storage, validate old transactions' blob
  files in addition to their meta data.

- Manager client: provide current recovery message for a storage that is
  recovering

- Allow combination of multiple ZEORaid servers that know of each other and
  can be used for automatic fallback. Need to investigate how the automatic
  fail-over to multiple servers of ClientStorage works.
