summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2004-09-06 09:28:10 +0000
committerivan <ivan>2004-09-06 09:28:10 +0000
commite9fe829de47a93ac77cacfda6f61b644a78a2929 (patch)
treebbcce9973e134bbd9f634389cad6b1c958f7e4f7
parent89aa808693d199a28e04e5cef360282a3ea668f6 (diff)
don't die off even on database failures
-rw-r--r--FS/bin/freeside-queued72
1 files changed, 53 insertions, 19 deletions
diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued
index 0be3d9d7a..e14ddad8e 100644
--- a/FS/bin/freeside-queued
+++ b/FS/bin/freeside-queued
@@ -51,7 +51,16 @@ $< = $FS::UID::freeside_uid;
$> = $FS::UID::freeside_uid;
$ENV{HOME} = (getpwuid($>))[7]; #for ssh
-adminsuidsetup $user;
+
+$@ = 'not connected';
+while ( $@ ) {
+ eval { adminsuidsetup $user; };
+ if ( $@ ) {
+ warn $@;
+ warn "sleeping for reconnect...\n";
+ sleep 5;
+ }
+}
$log_file = "/usr/local/etc/freeside/queuelog.". $FS::UID::datasrc;
@@ -75,14 +84,17 @@ while (1) {
}
$warnkids=0;
- my $dbh = dbh;
- unless ( $dbh->ping ) {
+ unless ( dbh && dbh->ping ) {
warn "WARNING: connection to database lost, reconnecting...\n";
- myconnect;
- unless ( $dbh->ping ) {
+
+ eval { myconnect; };
+
+ unless ( !$@ && dbh && dbh->ping ) {
warn "WARNING: still no connection to database, sleeping for retry...\n";
sleep 10;
next;
+ } else {
+ warn "WARNING: reconnected to database\n";
}
}
@@ -91,11 +103,15 @@ while (1) {
# my $oldAutoCommit = $FS::UID::AutoCommit;
# local $FS::UID::AutoCommit = 0;
$FS::UID::AutoCommit = 0;
-
- my $nodepend = driver_name eq 'mysql'
- ? ''
- : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'.
- ' WHERE queue_depend.jobnum = queue.jobnum ) ';
+
+ #assuming mysql 4.1 w/subqueries now
+ #my $nodepend = driver_name eq 'mysql'
+ # ? ''
+ # : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'.
+ # ' WHERE queue_depend.jobnum = queue.jobnum ) ';
+ my $nodepend = 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'.
+ ' WHERE queue_depend.jobnum = queue.jobnum ) ';
+
my $job = qsearchs(
'queue',
{ 'status' => 'new' },
@@ -104,25 +120,43 @@ while (1) {
? "$nodepend ORDER BY jobnum LIMIT 1 FOR UPDATE"
: "$nodepend ORDER BY jobnum FOR UPDATE LIMIT 1"
) or do {
- $dbh->commit or die $dbh->errstr; #if $oldAutoCommit;
+ # if $oldAutoCommit {
+ dbh->commit or do {
+ warn "WARNING: database error, closing connection: ". dbh->errstr;
+ undef $FS::UID::dbh;
+ next;
+ };
+ # }
sleep 5; #connecting to db is expensive
next;
};
- if ( driver_name eq 'mysql'
- && qsearch('queue_depend', { 'jobnum' => $job->jobnum } ) ) {
- $dbh->commit or die $dbh->errstr; #if $oldAutoCommit;
- sleep 5; #would be better if mysql could do everything in query above
- next;
- }
+ #assuming mysql 4.1 w/subqueries now
+ #if ( driver_name eq 'mysql'
+ # && qsearch('queue_depend', { 'jobnum' => $job->jobnum } ) ) {
+ # dbh->commit or die dbh->errstr; #if $oldAutoCommit;
+ # sleep 5; #would be better if mysql could do everything in query above
+ # next;
+ #}
my %hash = $job->hash;
$hash{'status'} = 'locked';
my $ljob = new FS::queue ( \%hash );
my $error = $ljob->replace($job);
- die $error if $error;
+ if ( $error ) {
+ warn "WARNING: database error locking job, closing connection: ".
+ dbh->errstr;
+ undef $FS::UID::dbh;
+ next;
+ }
- $dbh->commit or die $dbh->errstr; #if $oldAutoCommit;
+ # if $oldAutoCommit {
+ dbh->commit or do {
+ warn "WARNING: database error, closing connection: ". dbh->errstr;
+ undef $FS::UID::dbh;
+ next;
+ };
+ # }
$FS::UID::AutoCommit = 1;
#}