Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

how to timeout an operation under mod_perl

by diego_de_lima (Beadle)
on Sep 07, 2008 at 03:03 UTC ( #709591=perlquestion: print w/replies, xml ) Need Help??

diego_de_lima has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks, Iīm trying to timeout DBI operations under mod_perl - like aborting a SELECT statement if DBI donīt returns in 10 seconds.

I know mod_perl has some limitations with signals, and also that Perl timeout signal has some other limitations.

Any ideas?

  • Comment on how to timeout an operation under mod_perl

Replies are listed 'Best First'.
Re: how to timeout an operation under mod_perl
by perrin (Chancellor) on Sep 07, 2008 at 03:13 UTC

      Wow. Spawning a new child process for every time you want to run a max-10-second interaction with your database?

      That sounds like the type of thing that motivated the creation of mod_perl and thus probably not something you want to do much from mod_perl.

      That module's documentation does link to an alternative, DBI's docs on Canceling Operations. But it is also correct to note that doing this will likely cause stability problems. We do it but we have to implement seppuku code whereby the process can usually recognize when it has lost its mind (because all DBI calls fail after that point -- which requires the processes in the layer above to know how to retry requests) and to kill itself when that happens.

      We also ask the database to timeout requests and that doesn't appear to introduce instability but it also appears to not always work (queries certainly sometimes run quite a bit longer than the specified maximum time-out). This, of course, varies based on how well such time-outs are supported by your particular database.

      So, yeah, it is a mess.

      - tye        

        Sam and I came up with this while working on a project together that had the potential to generate very long-running queries. We tried a few other things before doing it this way, and they all had downsides. The potential for trouble when you use unsafe signals with XS code is pretty high. If forking really bothers you, you could do a more complicated approach with a prefork server.

        You do mention that you already use the unsafe signals approach. If that's working for you, what more were you looking for?

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://709591]
Approved by perrin
Front-paged by tye
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2022-05-27 18:12 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (97 votes). Check out past polls.