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:[EMAIL PROTECTED] Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/
ZODB-Dev mailing list - ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev