summaryrefslogtreecommitdiff
path: root/FS/bin/freeside-queued
diff options
context:
space:
mode:
authorivan <ivan>2009-10-29 22:55:46 +0000
committerivan <ivan>2009-10-29 22:55:46 +0000
commitab9dbc622e033ecfea680435046de60e33045b5d (patch)
treec96d0bbbeb9fa197b1d44f7944e0ceb92b77a1df /FS/bin/freeside-queued
parent262e0d79deda87cdf9a289227f56dd4619f8581f (diff)
have freeside-queued be more resillient in the face of a database that's gone away, RT#6428
Diffstat (limited to 'FS/bin/freeside-queued')
-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
};