You also might want to look at the way DBIx::HA implements its timeout
checks and overall analysis of the DB's responsiveness.
The source code is very small so shouldn't be difficult to follow.
H.
On Dec 2, 2008, at 9:19 PM, Hendrik Schumacher wrote:
alarm() definitely works in mod_perl.
For timeouts in DBI see:
http://search.cpan.org/~timb/DBI-1.607/DBI.pm#Signal_Handling_and_Canceling_Operations
Hendrik
Am Di, 2.12.2008, 16:22, schrieb April Papajohn (Blumenstiel):
Hello,
I am working on a site that has a modperl (mod_perl 1.3, perl 5.8)
handler doing some authentication work via DBI::MySql. It connects to
a MySQL server over the network.
Recently during some maintenance on the MySql server, the entire site
was hung up, because the MySQL server was up, but it wasn't
responding. It is important that the site continue to function, even
if MySql is down or slow. Sadly, I don't have the details on exactly
what they were doing with the MySql server that would cause this. I'm
working on limited information.
I was able to reproduce something like what may have happened simply
by pausing the MySql thread in my test environment. If I do that, the
web page does just hang.
The perl module wasn't dying, so wrapping everything in eval{} won't
solve the problem.
I tried setting alarm() around the DBI lines, using the
Sys::SigAction
module, in order to get the script to timeout if MySql isn't
responsive. This works great if I run it as a plain perl script. But
it seems that alarm() doesn't work in mod perl.
So now I'm stuck.
I'm just looking for suggestions for possible solutions. Any way that
I can safe guard the site against a misbehaving MySql server.
Thanks,
April