On Fri, Jan 28, 2011 at 4:58 PM, Jürgen Herrmann
<juergen.herrm...@xlhost.de> wrote:
...
>  Afaics you use zodbpack's default of "days=0". This is known to produce
>  POSKeyErrors if the database is written to while packing.

It can lead to POSKeyErrors under certain pathological cases, but Is not
generally a problem in practice.

An example where it could be a problem:

    x = Foo()
    self._p_jar.add(x)
    transaction.commit()

At this point, x is in the database and is thus garbage.  For the sake
of this discussion, assume the database is packed to this point in
time and x is removed from the database.

    self.x = x
    transaction.commit()

At this point, self refers to an object that is no longer in the
db. At some later time, once self has been ghostified and x is removed
from local cache, if we try to access x, we'll get a poskey error.

I would argue that the application code above is broken.

Note that the storage could validate the reference to x when self is
saved, but no storage that I know of does, for performance reasons.
In some future version of ZODB, it might be nice to change the
database record structure to make this sort of check easier.


Jim

--
Jim Fulton
http://www.linkedin.com/in/jimfulton
_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to