On Thu, Nov 12, 2009 at 1:34 AM, Christian Theune <c...@gocept.com> wrote:
> 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.
I don't understand what you are trying to say above. Perhaps a more
detailed proposal will make it clearer.
BTW, I've refactored the waiting list code quite a bit on the
jim-thready-zeo2 branch, which I plan to merge to trunk soon.
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org