[ZODB-Dev] Undo differences between Z2 and Z3
David Pratt
fairwinds at eastlink.ca
Tue May 16 13:46:08 EDT 2006
Jim Fulton wrote:
> David Pratt wrote:
>> There seems to be enough of a difference between Z2 and Z3 undo to
>> have an effect on a backend like PGStorage from working on Z3. I
>> believe the objective in the storage api is that it should not matter
>> to the backend whether you are connected to Z2 or Z3. Can someone more
>> familiar with the history of undo in z2 and z3 explain the current
>> situation?
>
> Undo has a fairly complicated API, and I can easily believe that Z2 and
> Z3 call that API in very different ways.
>
> BTW, I strongly discourage use of Undo except in emergencies.
> Sadly, except when undoing the last (non-undo) transactions in
> a database can lead to inconsistency. Undo should be used with
> caution and should generally not be exposed to non-expert users.
Undo has been a part of CMF and Plone for non-expert users for quite
some time by exposing only the last non-undo transaction. This should be
fine for Z3 I believe. In any case, my interest is initially to give Z3
what it is asking for without crapping out so contents view will work
for a principal through z3 zmi.
>> In Z3, before bringing up the contents view, there is a check of the
>> undo transactions for the principal. It uses z3's undo manager to
>> getPrincipalTransactions which eventually results in a lookup in the
>> undoLog in the external storage where it dies. Just a brief look at
>> the undo code in z3 gives me the feeling the format
>
> Format of what?
I am referring to is this which is the route this is taking to the undoLog :
def _getUndoInfo(self, context, principal, first, last):
specification = {}
if context is not None:
locatable = IPhysicallyLocatable(context, None)
if locatable is not None:
location = Prefix(locatable.getPath())
specification.update({'location': location})
if principal is not None:
# TODO: The 'user' in the transactions is a concatenation
# of 'path' and 'user' (id). 'path' used to be the path
# of the user folder in Zope 2. ZopePublication currently
# does not set a path, so ZODB lets the path default to
# '/'. We should change ZODB3 to set no default path at
# some point
path = '/' # default for now
specification.update({'user_name': path + ' ' + principal.id})
entries = self.__db.undoInfo(first, last, specification)
>
> It's possible that there is a bug in PGStorage in handling
> extension data. I can easily believe that Z2 doesn't use extension
> data and perhaps z3 does.
Thanks. I have reported this to Shane but am also experimenting with
storages so have an interest in understanding what is happening.
Regards,
David
More information about the ZODB-Dev
mailing list