[freeside-commits] freeside/FS/bin freeside-queued,1.44,1.45

Ivan,,, ivan at wavetail.420.am
Thu Oct 29 15:55:48 PDT 2009


Update of /home/cvs/cvsroot/freeside/FS/bin
In directory wavetail.420.am:/tmp/cvs-serv26091

Modified Files:
	freeside-queued 
Log Message:
have freeside-queued be more resillient in the face of a database that's gone away, RT#6428

Index: freeside-queued
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/bin/freeside-queued,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- freeside-queued	26 Jun 2009 23:21:45 -0000	1.44
+++ freeside-queued	29 Oct 2009 22:55:46 -0000	1.45
@@ -107,12 +107,20 @@
     $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 @@
 
     $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 @@
       $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
     };
 



More information about the freeside-commits mailing list