summaryrefslogtreecommitdiff
path: root/FS/bin
diff options
context:
space:
mode:
authorivan <ivan>2009-10-29 22:56:30 +0000
committerivan <ivan>2009-10-29 22:56:30 +0000
commitf1aefa836d3a20c4fe2f202efe09bd3039dbfad2 (patch)
tree83fd51d84cedd07580d4aa5940eabd950715524a /FS/bin
parent761799f5c740b73063b05b62c05fec1bd17e244f (diff)
have freeside-queued be more resillient in the face of a database that's gone away, RT#6428
Diffstat (limited to 'FS/bin')
-rw-r--r--FS/bin/freeside-queued29
1 files changed, 21 insertions, 8 deletions
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
};