[Zope] Trying to trap ConflictError
dieter at handshake.de
dieter at handshake.de
Thu Jul 6 14:56:54 EDT 2006
Jonathan wrote at 2006-7-6 09:53 -0400:
> ...
>>From what I understand from the above code, the error is being raised
>because the oid already exists and the object pointed to by the old oid is
>different from the object pointed to by the new oid, hence the conflict
>error.
You interpretation is slightly wrong. What really differs is not
the object (or "oid") but the timestamp.
Each persistent object has a timestamp "_p_serial" which
identifies the transaction that made the last change to the object.
When an object is loaded from the ZODB, its timestamp is
recorded (in "_p_serial"). When later a change to the object
should be commited, the recorded timestamp is compared to the object's
current timestamp in the ZODB. If the timestamps differ, then
the object was modified by a concurrent transaction and our
modification is likely to be based on stale information.
As a result a "ConflictError" is raised.
--
Dieter
More information about the Zope
mailing list