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 >
