From: ivan Date: Thu, 29 Oct 2009 22:55:46 +0000 (+0000) Subject: have freeside-queued be more resillient in the face of a database that's gone away... X-Git-Tag: root_of_svc_elec_features~725 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=ab9dbc622e033ecfea680435046de60e33045b5d have freeside-queued be more resillient in the face of a database that's gone away, RT#6428 --- diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index e97a52cab..d5d84cced 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -107,12 +107,20 @@ while (1) { $hashref->{'secure'} = ''; } - my @jobs = qsearch({ - 'table' => 'queue', - 'hashref' => $hashref, - 'extra_sql' => $nodepend, - 'order_by' => $order_by, - }); + #qsearch dies when the db goes away + my @jobs = eval { + qsearch({ + 'table' => 'queue', + 'hashref' => $hashref, + 'extra_sql' => $nodepend, + 'order_by' => $order_by, + }); + }; + if ( $@ ) { + warn "WARNING: error searching for jobs, closing connection: $@"; + undef $FS::UID::dbh; + next; + } unless ( @jobs ) { dbh->commit or do { @@ -145,7 +153,12 @@ while (1) { $FS::UID::AutoCommit = 1; - my @args = $ljob->args; + my @args = eval { $ljob->args; }; + if ( $@ ) { + warn "WARNING: error retrieving job arguments, closing connection: $@"; + undef $FS::UID::dbh; + next; + } splice @args, 0, 1, $ljob if $args[0] eq '_JOB'; defined( my $pid = fork ) or do { @@ -155,7 +168,7 @@ while (1) { $hash{'statustext'} = "[freeside-queued] can't fork: $!"; my $ljob = new FS::queue ( \%hash ); my $error = $ljob->replace($job); - die $error if $error; + die $error if $error; #XXX still dying if we can't fork AND we can't connect to the db next; #don't increment the kid counter };