Em 23-10-2012 14:09, Jeremy Evans escreveu:
On Monday, October 22, 2012 6:20:41 PM UTC-7, Rodrigo Rosenfeld Rosas
wrote:
Em segunda-feira, 22 de outubro de 2012 19h34min26s UTC-2, Jeremy
Evans escreveu:
On Monday, October 22, 2012 11:47:29 AM UTC-7, Rodrigo
Rosenfeld Rosas wrote:
I had to restart the PostgreSQL service in our database
server and the
Rails apps using Sequel stopped working.
Is there a way to instruct Sequel to try to reconnect on
such cases? One
that works both for MRI and JRuby?
Sequel should be removing the connections from the pool,
reraising the exceptions, and creating new connections as
needed in the future. So it's expected that some
DatabaseDisconnectErrors will be raised, but Sequel should
recover, assuming that it correctly recognizes the
disconnections (which it should on the postgres and
jdbc/postgres adapters). If that isn't what you experienced,
please try to put together a reproducible test case and I'll
take a look.
But this is a problem for our setup as we have a cluster with a
dozen servers and there will be as many reported errors as there
are servers in the cluster and all of them end up in our SLA
errors log which affects our contract :(
Is there a way of just instructing Sequel to query something like
"select 1" before attempting to use the connection? Hibernate has
an option to do so and it works. Our application is a mix of a
Grails and a Rails app. We only had to restart the Rails servers
of the cluster as the Grails ones that used Hibernate with this
option enabled didn't experience any issues.
We'd like to be able to do something like with Sequel as well.
Would that be possible?
It's actually something I'm planning to implement as a extension very
soon. The recently committed refactoring of the database <->
connection pool interface is the first step, I need to add code to
check connections for validity and then an extension that
automatically checks connections for validity when they are checked
out from the pool.
Note that restarting your app servers whenever you restart your
database server has been the recommended way for a long time. The
extension I'm planning to implement is mostly to handle inactive
connections in the pool that get timed out and disconnected by the
database. If you have control over when your database server
restarts, it shouldn't be difficult to make sure your app servers are
restarted at the same time.
It is a bit tricky actually because I need some tool to ssh over all
servers in the cluster and ask them to restart. Also, using it this way
causes some downtime and loading the Rails app is much slower than
restarting the PostgreSQL database (which happens in within a second).
No downtime was reported when we restarted the database from the Grails
app, but we had issues with the Rails app.
Anyway, it is good to know that you're working on such an extension.
Looking forward to it.
Thanks,
Rodrigo.
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.