in ZEORaid we're using the storage (a ZEORaid instance) as it's being by
ZEO for recovering data from the good storages into one we're recovering.
For finishing the recovery exactly on transaction boundaries and to
avoid transactions slipping in when we think we're done we acquire the
commit lock for a short period of time.
If a client tries to write in that period of time the transaction will
be put into the StorageServer's waiting list and sit there either
indefinitely or until another client comes around calling abort() or
So this is basically an issue because StorageServer assumes that it or
another instance of StorageServer is ever talking to that storage, so it
implements a secret protocol (the waiting list) which is not officially
visible to other code.
I can hack around this for now by making the waiting list visible to my
code and notify the waiting storages from there, but, I'd like to
propose an extension to the storage API.
We basically need the ability to register callbacks with a storage that
will be called on transaction boundaries. With that we can redo the
current _restart implementation so that it can be triggered from code
that doesn't need to know that a storage is being wrapped in such a way.
If you think we can go down that route in general, then I'll prepare a
more detailed proposal including making a draft implementation.
Christian Theune · c...@gocept.com
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 0 · fax +49 345 1229889 1
Zope and Plone consulting and development
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org