[ZODB-Dev] semantics of _v_ attributes?

Chris Withers chris at simplistix.co.uk
Thu Oct 7 02:34:59 EDT 2010


On 06/10/2010 15:19, Jim Fulton wrote:
> _v_ attributes should be dropped whenever an object's state is
> cleared.

It would be great if there was some clear documentation covering all 
this in the ZODB package...

> So, you want to update an object using old state.
>
> I would use:
>
>    base._p_invalidate() # remove state, including volatiles, no matter what
>    base._p_activate()       # make sure we're not a ghost
>    base.__setstate__(state) # change the state
>    base._p_changed = True   # marke object as dirty
>
> This isn't foolproof, depending on how an object uses _v_.  For
> example if __setstate__ sets _v_s if they aren't already set, then the
> above code would likely fail, as the _v_s would reflect the old state,
> not the new.

Okay, it works for the Zope 2.12 problem at hand:
https://bugs.launchpad.net/zope2/+bug/649605

> If this use case is important, it would be better for ZODB tp provide
> an API to handle this directly, so you didn't have to hack together
> existing APIs.

Well, I have customers who think it's important, but it depends on 
whether you still think Zope 2 with TTW editing is important ;-)

> I assume this code will ultimately be followed by a commit.

Correct.

> Well, for your use case, you're going to be committing a change to the
> object.  That will cause instances of the object in all other
> connections to be invalidated, dropping their volatile attributes.

Cool :-) I'll take this on trust, I don't want to contemplate trying to 
write a test that proves it ;-)

Chris

-- 
Simplistix - Content Management, Batch Processing & Python Consulting
            - http://www.simplistix.co.uk


More information about the ZODB-Dev mailing list