diff options
| author | ivan <ivan> | 2009-10-29 22:56:30 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2009-10-29 22:56:30 +0000 | 
| commit | f1aefa836d3a20c4fe2f202efe09bd3039dbfad2 (patch) | |
| tree | 83fd51d84cedd07580d4aa5940eabd950715524a /FS/bin/freeside-queued | |
| parent | 761799f5c740b73063b05b62c05fec1bd17e244f (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-queued | 29 | 
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      }; | 
