[ZODB-Dev] Re: Changes in _p_changed behaviour between Zope 2.7 and
2.9
Florent Guillaume
fg at nuxeo.com
Sat Apr 29 07:52:28 EDT 2006
Chris Withers wrote:
> Florent Guillaume wrote:
>>> base._p_changed=0
>>
>> Marks the object not changed, to allow ghostifying.
>>
>>> base._p_deactivate()
>>
>> Ghostifies the object.
>>
>>> base.__setstate__(state)
>>
>> Updates the object's dict directly. This really shouldn't be called on a
>> ghost object, I believe it's illegal but not checked. I'm not sure what
>> happens anyway.
>
> Right, that's what I figured too, and I'm guessing ZODB now does "the
> right thing", which breaks history copy because history copy has this
> bug ;-)
>
>> base._p_activate() # make sure we're not a ghost
>
> Ah cool, never new that existed...
>
>> base.__setstate__(state) # change the state
>> base._p_changed = True # marke object as dirty
>>
>> The "scrubbing" is not necessary, it's done by the __setstate__ C
>> implementation of Persistent.
>
> Okay, in that case we can loose everything funky before the __setstate__
> call, right? How sure are you that __setstate__ will override
> everything? I see that Evan specifically added the code to do the
> scrubbing in revision 20478, sadly he didn't write tests or explain why
> it was necessary :-S
Well the C code is pretty clear, it does a PyDict_Clear before doing
PyDict_Update on the __dict__. Dunno how it was at the time Evan made
his comment.
For the rest, sorry, I don't have time to dig for examples.
Florent
>> You don't need any transactions to at least test this sequence, only the
>> Persistent base class and a dummy connection can be involved.
>
> Hmmm, this smells like deep fu of which I am not capable ;-)
> Are there any examples of this?
>
>> To really test the history yes of course you'll need a full database.
>> Many
>> tests do that.
>
> Oh, do you know of any examples I can look at?
>
> cheers,
>
> Chris
>
--
Florent Guillaume, Nuxeo (Paris, France) Director of R&D
+33 1 40 33 71 59 http://nuxeo.com fg at nuxeo.com
More information about the ZODB-Dev
mailing list