[ZODB-Dev] multi-level undo on a single object

Tim Peters tim at zope.com
Tue Aug 30 19:31:18 EDT 2005


[Arthur Peters]
> Thanks you very much.

Hey, we're both named Peters -- you're probably the son I never knew (or
vice versa ;-))

> I'm still having issues but I'll investigant it myself before I ask
> anything else. I think I came across as pushy and demanding and I'm
> sorry. I didn't mean to. I just ment this as questions and ideas.

Hmm.  I must have said something that came across as being annoyed.  That
wasn't the intent -- really.  You came across as ... optimistic <wink>.
There's nothing wrong with that, and discussion is very welcome here.

> You know ZODB much better than I

Some parts, but I really know very little about the undo implementation.  I
wasn't involved in coding it, and AFAIK there are no docs that explain how
to use it.  In fact, I'm not even sure the sample code I sent shows the
_intended_ way to use it.  But by posting my best guess on this list, I hope
that if someone knows better, they'll yell at me for what I did, and we'll
all learn from that.

> and I'll go for a app-level implementation of undo unless I happen
> across a nice way to use ZODB for it.

That's my best recommendation.  Database undo is a dicey feature, even in
theory when it's not strictly stack-like.  For example, transaction 1 makes
a change to object A.  Transaction 2 makes a change to object B based on
state it sees in object A from transaction 1.  Transaction 1 alone is
undone.  Oops!  Object B is left with state that doesn't make sense anymore.
It's exceedingly easy to violate application-level cross-object invariants
this way.  Couple with that all storages eventually have to throw
non-current object revisions away, and there's not much left you can rely
on.

BTW, this may interest you (not sure):

    http://svn.zope.org/Zope3/trunk/src/zope/app/versioncontrol/

See README.txt there.



More information about the ZODB-Dev mailing list