FastCGI/Oracle timeout issue

View: New views
2 Messages — Rating Filter:   Alert me  

FastCGI/Oracle timeout issue

by Benjamin Hitz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


So I have a little trouble with my CGIapp running under fastCGI.  
These are the only two apps I run under FastCGI (currently) so I don't  
have a huge amount of experience with it.

The phenotype is this:
Our Oracle users have a connection limit set (usually 4 hours or so) -  
including the user "WEBB" which the CGI scripts all use.
If a fastcgi/cgiapp script is unused for a long time (slightly greater  
than the time out) than the Oracle user logs out.  The CGI app (under  
fastcgi) then hangs, eternally cycling one of about 3 different error  
messages.

The error messages are caught in a run mode like this:

#######################################################################
sub setup {
#######################################################################

     my $self = shift;

     $self->start_mode('display_search_form');
...
}

#######################################################################
sub display_error {
#######################################################################
     my $self = shift;


     my $title = $self->{title} || "Error from CGI::Application $0";

     my %dataHash = ( page_title => $title,
                     errors     => \@_,
                     internal_url => $self->{URL},
                     external_url => $self->{extURL},
                     parameter    => { $self->query->Vars }
                   );

     $dataHash{errors} = $self->{error_message} if ($self-
 >{error_message});

     return $self->tt_process('error.tmpl', \%dataHash);
}

I thought that I could try to catch the error in the main controller  
loop:

(WWW::Reports::LocusReport::LocusSummary ISA CGI::Application)0

while (my $q = CGI::Fast->new) {
     my $app = WWW::Reports::LocusReport::LocusSummary->new(QUERY => $q,
                                                           tmpl_path => [
                                                                     $ROOT_TMPL_PATH . "/Reports/LocusReport/LocusSummary",
                                                                     $ROOT_TMPL_PATH . "/Reports/LocusReport",
                                                                     $ROOT_TMPL_PATH . "/Reports",
                                                                     $ROOT_TMPL_PATH
                                                                     ],
                                                       );
     $app->run;

     die "Error found, killing process" if $app->{error_message};

}

But this doesn't appear to work... perhaps the object is cleansed  
between output and exit of $app->run?
I can just stick an exit or die in the display_error runmode method...  
but this results in a 500 error.  The good news is that after the 500  
error, a reload restarts the fastCGI process and gets a good result.

I would really like to catch this error and restart the process with a  
minimum of fuss.  I would be OK with showing the error.tmpl; I could  
add a reload to it or something.  I suppose some way of dropping the  
database handle and reconnecting would work.  I am using  
CGI::Application::Plugin::DBH and dbh_cached with DBD::Oracle.

Thanks,
Ben
--
Ben Hitz
Senior Scientific Programmer ** Saccharomyces Genome Database ** GO  
Consortium
Stanford University ** hitz@...




#####  CGI::Application community mailing list  ################
##                                                            ##
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################


Re: FastCGI/Oracle timeout issue

by Benjamin Hitz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Just an update on this... I did manage to trap the error in the  
teardown method and kill the process.
I just had confused myself with fallback error processing.

Ben

On Aug 13, 2009, at 2:43 PM, Benjamin Hitz wrote:

> Our Oracle users have a connection limit set (usually 4 hours or so)  
> - including the user "WEBB" which the CGI scripts all use.
> If a fastcgi/cgiapp script is unused for a long time (slightly  
> greater than the time out) than the Oracle user logs out.  The CGI  
> app (under fastcgi) then hangs, eternally cycling one of about 3  
> different error messages.

--
Ben Hitz
Senior Scientific Programmer
Saccharomyces Genome Project
Stanford University
hitz@...




#####  CGI::Application community mailing list  ################
##                                                            ##
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################