Hi,

I have an app using AR that is threaded, and accesses multiple
databases.

Sometimes I get MySQL server has gone away errors if a connection
timed out due to a long period of inactivity.

So I would wish to verify the connections before using them.

Using verify_active_connections! is not possible, it is not thread
safe.  (In particular for Mysql it sends a stat request to every
connection, which resets affected_rows, thus breaking optimistic
locking which checks this.)

The problem is, there is not really an API for verify the current
connections that a thread has.

The best I can do is this ugly line:

ActiveRecord::Base.connection_handler.connection_pools.each_value {|
pool| pool.connection.verify!}

But this isn't ideal as this code will checkout a connection for
*every* database in use, rather than just verify the ones that a
particular thread is using (the ones that it already has checked out).

I suppose we could just check in all the thread's connections with
clear_active_connections! so that they are verified on checkout then
next time they are used.  This seems clumsy though.

Could there be added a new method that does what I want?  I could
provide a patch if needed.

eg.

ActiveRecord::Base.verify_current_connections!

- Stephen

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

Reply via email to