[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