[ZODB-Dev] Setting _p_changed on a ghost
Jim Fulton
jim at zope.com
Thu Sep 1 08:42:39 EDT 2005
Dieter Maurer wrote:
> Tim Peters wrote at 2005-8-26 14:59 -0400:
>
>>...
>>I would like to make it an error (raise a ValueError exception) to attempt
>>to set obj._p_changed to a true value when obj is a ghost. Does anyone
>>object?
>
>
> I came along an argument against this change:
>
> Assume, you have a persistent object "o" with a mutable
> non persistent attribute "a".
>
> One of the idioms for changing "a" looks like:
>
> ... modify "o.a" ...
> o._p_changed = True
>
> However, as Shane pointed out, this may cause ZODB inconsistencies:
>
> When "... modify "o.a" ..." raises an exception,
> then "a" may or may not already have been modified.
> Such changes may be committed in a future transaction
> (not the current one, as this is aborted).
>
> Therefore, he proposed to change the idiom to:
>
> o._p_changed = True
> ... modify "o.a" ...
>
> Now, the persistence subsystem (hopefully) already knows the "o" is changed
> and invalidates it on abort. The inconsistency cannot occur.
>
> Of course, raising an exception when "o" happens to be
> a "ghost", would not be appropriate for this idiom -- neither
> is the current behaviour to just ignore the assignment
> to "_p_changed".
This is an excellent argument.
+1 on _p_changed=1 deghostifying, if necessary.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the ZODB-Dev
mailing list