[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