On Dec 14, 2008, at 11:41 PM, Harish Vishwanath wrote:

> Hello All,
>
> I have a situation like this :
>
> Thread T1, has session T1Session.
> Thread T2, has session T2Session. They both bind to the same database.
>
> Now, I have scenario like below :
>
> u1 = User(1111)
> u2 = User(2222)
> u3 = User(3333)    #All these are Entity objects, 1111, 2222 and  
> 3333 are primary keys.
>
> T1Session.add( < u1, u2 and u3 > )
> T1Session.flush()
> T1Session.commit()
> # T1Session.identity_map will have the 3 user objects.
>
> li = T2Session.Query(Users).all()
> for u in li:
>   T2Session.delete(u)
>   T2Session.flush()
>   T2Session.commit()
>
> #But T1Session.identity_map still has the 3 user objects.
> a = User(1111)
> b = User(2222)
> T1Session.add(a)
> T1Session.add(b)
> T1Session.flush()
> >>> Throws an exception :
>     raise exc.FlushError("New instance %s with identity key %s  
> conflicts with persistent instance %s
> " % (state_str(state), str(instance_key), state_str(existing)))
> >>>
>
> Clearing T1Session before adding a and b would work. But I dont have  
> that much control over T1Session, and setting up a mechanism to do  
> this will turn to be very complicated in my app's scenario. Is there  
> any way to make T1Session aware that it has invalid data in its  
> identity_map immediately after T2Session deleted those users?

You can approach this partially by building a SessionExtension which  
listens for flush events in T2Session, looks at whats changed during  
after_flush() using new/dirty/deleted, and calls the appropriate  
expire() calls in the other session.  But you'll still be subject to  
transaction isolation issues.  The fact that there's two concurrent  
transactions going on by definition makes what you're doing  
impossible, unless transactional state is reset in the target session.




--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to