On May 20, 2011, at 11:30 PM, Adrian wrote: > Ok, I'll definitely do some quality debugging... > > Just to be clear -- I **don't** have to worry about closing my > sessions in each controller?
the best practice we recommend is that in a post-request event handler , you call remove() on your scoped_session() to remove all state and connection resources. turbogears should be handling this from what I know. > > On May 20, 6:08 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: >> On May 20, 2011, at 4:12 PM, Adrian wrote: >> >>> So if it is the latter, that the Session is being shared amongst >>> threads, what is the correct way to handle the sessions from within >>> Turbogears? What I do now is create a scoped_session in the model, and >>> import it into each controller. For a while, I made use of special >>> functions _before() and _after() to create the session in _before the >>> page loads, and close it in _after, but then I was getting >>> DetatchedInstanceErrors when I tried to access columns from objects >>> returned to the template. >> >>> I'm not sure how familiar you are with Turbogears, so I apologize if >>> this is too much of a TG question...but I asked this on their mailing >>> list and their answer was that what I was doing was correct -- >>> obviously it's not if I'm getting these AssertionErrors... >> >>> Thanks for the quick reply, as usual! >> >> So scoped_session() will ensure that sessions are associated with threads. >> Its not a total guarantee of thread safety if for example you're placing >> objects in some kind of in-memory cache, then using them in other threads >> without detaching them first from their original session. >> >> You really need to figure out what the catalyst for the issue was - short of >> locating the actual cause of the bug, that would produce the most clues >> towards what it is. Or, this is a really harsh approach that I had to do >> once when a deeply nested call to a defunct Google service started crashing >> the site, I had to disable all pages on the site, then slowly turn one page >> on after the next to isolate which one was the cause of the issue. Clearly >> that isn't an option in lots of cases but it depends on if you can reproduce >> the issue locally, perhaps when load testing with Apache "ab" and such. >> >> If its something I had seen before that would help but I've never seen >> anyone hitting that assertion before. >> >> >> >> >> >>> On May 20, 9:59 am, Michael Bayer <mike...@zzzcomputing.com> wrote: >>>> On May 20, 2011, at 9:45 AM, Adrian wrote: >> >>>>> I have a Turbogears server that uses sqlalchemy to interface with a >>>>> postgres database. Today, I noticed the server was down, so I tried >>>>> restarting it. Now my turbogears log is full of errors like: >>>>> AssertionError: A conflicting state is already present in the identity >>>>> map for key (<class 'dr8db.ModelClasses.FITSHeaderKeyword'>, (1045,)) >>>>> and >>>>> Exception KeyError: KeyError((<class >>>>> 'dr8db.ModelClasses.MaskbitsType'>, (61,)),) in <bound method >>>>> InstanceState._cleanup of <sqlalchemy.orm.state.InstanceState object >>>>> at 0x4445c90>> ignored >> >>>>> I tried googling this stuff, but found nothing... >> >>>>> Basically it lets me start the paster (Turbogears) server, but after >>>>> ~5-10 minutes the server dies and there are hundreds of these errors >>>>> in the log -- help!! I need to get this server back up ASAP! >> >>>> That's an assertion that is generally unreachable from within the Session. >>>> The only ways I think you could get there would be via direct >>>> manipulation of session.identity_map, or if the Session is being shared >>>> among concurrent threads, which is not supported. >> >>>> The main thing you'd be looking for here is, at what point did this server >>>> begin to fail and what event precluded that happening ? Either a code >>>> update, or perhaps the app was never tested against its current load, are >>>> the two possibilities. >> >>> -- >>> 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 >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- > 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. > -- 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.