I've just checked in a fair bit of re-factoring to try to define reasonable storage interfaces. The results can be found at:




Some notes:

- I added a new tpc_transaction method to allow ZEO to get some information it needs without groping for _transaction. Storage servers will still work with storages that don't have this method, but will log problems. Current storage implementations should add this method.

- I'm not sure whether history, loadSerial, pack, and registerDB, should be in IStorage. I have a feeling that packing and other database-management tasks should be exposed some other way. history and loadSerial are fairly special, although they can be wildly useful. (IMO, there should be a history view for all Zope objects that lets one at least see the transaction history for an object even if looking at old data isn't supported.) Only very specialized storages need registerDB AFAICT.

- See my earlier message about getExtensionMethods.

- I was able to retire a poorly documented and understood method that was only needed by ZEO: loadEx.

- Intentionally included version-support methods from the APIs.

- I arranged that storages that don't support undo or versions don't need to provide any of the methods.

I cleaned up various other sundry things along the way and identified some bugs, fixing at least one.

Comments on the APIs are very welcome. Hopefully this will clarify some things.

One of my text tasks will be to add some documentation about concurrency requirements.


Jim Fulton                      mailto:[EMAIL PROTECTED]                Python 
CTO                             (540) 361-1714                  
Zope Corporation        http://www.zope.com             http://www.zope.org

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to