Andreas Jung wrote:



--On 13. Oktober 2005 01:33:14 -0400 Chris Spencer <[EMAIL PROTECTED]> wrote:

Andreas Jung wrote:



--On 13. Oktober 2005 00:52:02 -0400 Chris Spencer
<[EMAIL PROTECTED]> wrote:

If one thread writes to an object on one connection, and another thread
does the same on another connection, then one calls
transaction.commit(), will the all the changes in both connections be
commited? Is there a way for threads to maintain separate transactions?



The first thread to commit wins. The second one will see a
WriteConflictError exception. THat's how the ZDOB works: first come,
first serve.

-aj


I don't understand. How would two different threads, operating on
different data, committing at different times be in any sort of conflict?
I thought ZODB only raises a ConflictError when the same object is
written to by different threads?


My remarks applies to the fact when you are writing to the *same* object (that's how I read and understood your posting). If you writing to different objects in different threads then all transactions are isolated...one of the basic features of databases.

I understand that, but my point was when you call transaction.commit(), you don't necessarily know what you're committing. One thread may be ready to commit. Another may not be. If one thread calls transaction.abort(), they may be aborting changes made by another thread. You'd have to write a complicated coordination mechanism to handle multi-threaded transactions to be sure. If threading is limited to connections, then wouldn't in make sense if transactions were as well?

Chris

_______________________________________________
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

Reply via email to