I tried some testing with PG and it appears that when PG is stopped,  
existing pooled connections are then invalid, then PG is restarted  
and after the connection is returned and fetched from the pool again,  
the .cursor() call will fail which is one place we do catch errors  
and invalidate connections; so you get one error throw after the DB  
is restarted per previously existing connection.  So while we still  
dont have invalidate catches for PG on execute()-level throws, we  
have them for cursor() level throws (since we consider all throws  
upon cursor() to be an invalidate situation).   So an application  
will survive a DB restart at this time on PG, but with some bumps.   
setting recycle to a low number (like 5 minutes) can also decrease  
the chance of errors.

the two errors we probably want to catch for PG on execute() are:

psycopg2.OperationalError: connection not open
psycopg2.InterfaceError: connection already closed

meaning, if those errors get thrown on cursor.execute(), invalidate  
the connection immediately.

Still, all of these measures require that we actually get an error  
thrown to detect that a restart took place, which inconveniently  
usually happens not at the point of cursor() but at the point of  
execute(), and we dont have any frameworks in place (nor am i  
terribly comfortable with) to handle "error was thrown, reconnect and  
try execute() again".   lots of things can go wrong with that, namely  
transactional state getting lost, mis-interpreted errors resulting in  
double-executions, race conditions, etc.  so i dont know if theres a  
way to recover from DB restarts 100% seamlessly.


On Mar 25, 2007, at 2:15 PM, Andreas Jung wrote:

> How does SA deal internally with connection errors or when connections
> go away. In my particular case Zope creates a new session for every  
> incoming HTTP request. What will happen if the corresponding server  
> process dies (e.g. the postmaster of Postgres crashes)? Is SA able  
> to re-establish a connection when needed?
>
> Andreas


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to