Re: [sqlalchemy] Re: Conflicting state in identity map?

2011-05-21 Thread Michael Bayer

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.



[sqlalchemy] Re: Conflicting state in identity map?

2011-05-20 Thread Adrian
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!

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 at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] Re: Conflicting state in identity map?

2011-05-20 Thread Michael Bayer

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



[sqlalchemy] Re: Conflicting state in identity map?

2011-05-20 Thread Adrian
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.