[ZODB-Dev] ZEO 2.0a1 release
Jeremy Hylton
jeremy@zope.com
Fri, 31 May 2002 12:02:40 -0400
>>>>> "TD" == Toby Dickenson <tdickenson@geminidataloggers.com> writes:
TD> Eeek - this came around quickly.
You mean you're surprised that we have a 2.0 alpha already? I'll bet
most of the code has been hanging around for more than a year.
>> If you're interested in contributing, now is a great time to
>> propose changes.
TD> Since you asked, I have a couple of ideas that have come out of
TD> my DirectoryStorage work that I havent shared yet;
TD> 1. It would be nice for a server-side storage to be able to
TD> declare that he
TD> has some extra methods that should be proxied from the
TD> ClientStorage. That could happen in ZEO1, but only by
TD> subclassing everything.
Good idea.
TD> 2. I am suprised that you have a DelayedCommitStrategy thing
TD> inside ZEO,
TD> rather than extending the storage interface to allow concurrent
TD> commits. (that would be a more obvious way to do it, but maybe
TD> not better). Thinking aloud, maybe the storage object could be
TD> allowed to provide his own DelayedCommitStrategy object?
I had considered this but found two difficulties with it:
1. It means changing the storage API and updating other storages to
take advantage of it. I don't want ZEO2 to require changes to the
storage API, and I want to get the advantages of sending data for
multiple transactions regardless of whether the underlying storage
supports the feature.
2. I looked at changing FileStorage to provide better support for
multiple concurrent commits, but it looked hard. It seems like the
current scheme has too many tempfiles: The ZEO server writes
everything to a tempfile. Then the FileStorage writes everything
to a tempfile, and copies the data when it commits. It would be
nice if we only needed to copy the data once.
But FileStorage's tempfile format is deeply connected with the
FileStorage log format. It needs to include serialnos for each of
the data records, and the serialno depends on the transaction
timestamp. So there's no easy way to figure out the serialno for a
transaction that is delayed.
So the FileStorage was mostly going to do what the StorageServer
now does. Write the basic data in a log, then run it through the
regular commit machinery when its turn comes. Since this was the
case, it seemed cleaner to put the code in StorageServer and get
the benefits for all storages.
I think it's fair to revisit the issue for ZODB 4 / Zope 3, but I
don't know when I'll have time for that.
Jeremy