[ZODB-Dev] undo (and storage interface) brokenness

Hanno Schlichting hanno at hannosch.eu
Wed Dec 23 20:02:41 EST 2009

On Thu, Dec 24, 2009 at 1:34 AM, Martin Aspeli <optilude+lists at gmail.com> wrote:
> Hanno Schlichting wrote:
>> Throwing away all changes done in the meantime is usually
>> not practical.
> ... although sometimes it is preferable to a full backup restore or
> living with whatever it is you want to restore (usually a delete).

Right. That's why we use beforestorage.

>> For recovery purposes of older data, we have found a bit of manual
>> work and zc.beforestorage to be the better approach.
> What is zc.beforestorage?

Look at its PyPi page http://pypi.python.org/pypi/zc.beforestorage

Basically it's a convenient way to open a database as it was at a
certain point in time.

So for Plone in practice you get a separate copy of the live database
or from a backup, open it via beforestorage at the time you want and
export the content you are looking for via a zexp. Put that zexp into
the import of your live server and import the content. You usually
have to reindex the content, as you cannot take the catalog entries
with you. This works nicely for restoring deleted content and we have
done so a number of times.

If there's some unwanted changes made to individual content items, you
can revert those via CMFEditions / application level versioning.

>> So if undo is gone from ZEO it wouldn't be tragic. If the "remove last
>> transaction" could be retained, that would be nice.
> I actually think it would be tragic. Or at least pretty miserable.

In practice it hardly ever works. Relying on it as a substitution for
backup or tested restore procedures is dangerous.

> People who manage high availability setups can probably find other ways
> (like very frequent backups and good restore routines). For a lot of
> "average" installations, it can be a lifesaver. It was a lifesaver for
> one of my clients about a week ago, for example. The late night
> phonecall kind of lifesaver.

Frequent backups and good restore routines have nothing to do with
high availability setups. They are a basic requirement for any type of

But even if you don't do frequent backups, as long as you have not
packed your database, your data is still there and can be retrieved
without too much hassle. But doing partial database recovery is
something that requires a good deal of knowledge of the underlying
application and database.


More information about the ZODB-Dev mailing list