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?
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.