[Zope] Conflict Errors

Chris McDonough chrism@zope.com
Thu, 01 Nov 2001 08:45:38 -0500


Damn, this is an excellent description.  I'm gonna go add it to the 
developer's guide.

Toby Dickenson wrote:
> On Thu, 01 Nov 2001 01:00:14 -0500, Chris McDonough
> <chrism@digicool.com> wrote:
> 
> 
>>Yeah, well... yeah.  (Staring at shoes)... conflicts can also happen 
>>on.. reads.  Yes.  Read conflicts, they're called.  This happens in the 
>>setstate method of Connection.py.  There's some explanation for this 
>>that has to do with consistency of data but I don't know it; at least I 
>>dont know it well enough to explain it competently.
>>
> 
> Zope loads objects from their persistent store into memory when they
> are first accessed. So if you have a transaction that touches several
> objects, you will be loading those objects gradually throughout the
> transaction.
> 
> (unless they are already in memory anyway; lets assume they are not)
> 
> Consider one of the last objects to be loaded..... the question is:
> what happens if that object has been modified in a different thread
> since the start of this current transaction?
> 
> Ideally, Zope would load the original state of the object. That is,
> the state that was current at the time when this transaction started.
> However, this capability has not yet been developed. When it does read
> conflicts will not happen.
> 
> Another option would be to load the new state of that object. This is
> what the first revision of ZODB did, and it is bad because it leads to
> inconsistencies. Our transaction sees some, but not all of the changes
> made in a different transaction. There are some objects for which this
> isnt a problem; I think the LowConflictConnection class that Chris
> referred to can allow you to exploit this.
> 
> 
> 
> 
> Toby Dickenson
> tdickenson@geminidataloggers.com
> 


-- 
Chris McDonough                    Zope Corporation
http://www.zope.org             http://www.zope.com
"Killing hundreds of birds with thousands of stones"