[ZODB-Dev] Threads and Connections

Gary Poster gary at zope.com
Wed Jul 26 13:03:59 EDT 2006


On Jul 26, 2006, at 12:52 PM, Chris McDonough wrote:

> FWIW I believe by default at least, open ZODB connections are tied  
> to the thread which did the opening (they are returned to a pool  
> when closed and reused, possibly in another thread).  And indeed  
> each connection does have a cache; caching is one of the primary  
> responsibilities of a connection object.
>
> See the documentation in ZODB/interfaces.py for "IConnection".
>
> I *think* what is happening here is that you are committing the  
> transaction devoted to the current connection/thread, and trying to  
> close a connection that has pending changes from another thread.   
> So when you do transaction.abort(), it's aborting the transaction  
> involving the current thread, not the one associated with the other  
> connection.
>
> That said, I'm not entirely sure what to tell you to do here; there  
> used to be an API named "setLocalTransaction" or somesuch that  
> allowed you to control the one-thread-per-connection policy wrt to  
> a transaction minimally, IIRC.  This API has disappeared, probably  
> replaced with something more flexible, but I'm not sure what that  
> is.  I suspect it may have something to do with the  
> transaction_manager parameter to DB.open() however.

Open the database with an explicit transaction_manager if you want to  
manage these yourself, instead of using the thread default.

If you have a connection, get the transaction_manager off of the  
connection.  Can't find it in the interface, unfortunately, but I  
believe it to be reliable.

All that said, Chris S, it sounds like you might be attacking a  
solved problem--and *might* be adding some serious unnecessary  
complexity.  Maybe you ought to take a step back and see if anyone  
has a general approach to what you want?  For instance,  you said

>> The reason why I'm doing this is because I'm trying to update the
>> classes of persistent objects loaded into memory.

Want to elaborate on this a bit?  It sounds like stuff other folks  
have done, but you might want to give more detail.

Gary


More information about the ZODB-Dev mailing list