From e7acc4af0a47299644ff2389be3991b708878693 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 25 Jun 2004 10:25:02 +0000 Subject: [PATCH] ping the database and retry rather before doing anything --- FS/FS/UID.pm | 14 ++++++++------ FS/bin/freeside-queued | 21 +++++++++++++++------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/FS/FS/UID.pm b/FS/FS/UID.pm index 8271f89f2..3d893ee2f 100644 --- a/FS/FS/UID.pm +++ b/FS/FS/UID.pm @@ -16,7 +16,7 @@ use FS::Conf; @ISA = qw(Exporter); @EXPORT_OK = qw(checkeuid checkruid cgisuidsetup adminsuidsetup forksuidsetup - getotaker dbh datasrc getsecrets driver_name ); + getotaker dbh datasrc getsecrets driver_name myconnect ); $freeside_uid = scalar(getpwnam('freeside')); @@ -84,11 +84,8 @@ sub forksuidsetup { $ENV{'BASH_ENV'} = ''; croak "Not running uid freeside!" unless checkeuid(); - getsecrets; - $dbh = DBI->connect($datasrc,$db_user,$db_pass, { - 'AutoCommit' => 0, - 'ChopBlanks' => 1, - } ) or die "DBI->connect error: $DBI::errstr\n"; + + $dbh = &myconnect; foreach ( keys %callback ) { &{$callback{$_}}; @@ -100,6 +97,11 @@ sub forksuidsetup { $dbh; } +sub myconnect { + $dbh = DBI->connect( getsecrets, {'AutoCommit' => 0, 'ChopBlanks' => 1, } ) + or die "DBI->connect error: $DBI::errstr\n"; +} + =item install_callback A package can install a callback to be run in adminsuidsetup by passing diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 6ea27c05f..0be3d9d7a 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -7,7 +7,7 @@ use Fcntl qw(:flock); use POSIX qw(:sys_wait_h setsid); use Date::Format; use IO::File; -use FS::UID qw(adminsuidsetup forksuidsetup driver_name dbh); +use FS::UID qw(adminsuidsetup forksuidsetup driver_name dbh myconnect); use FS::Record qw(qsearch qsearchs); use FS::queue; use FS::queue_depend; @@ -75,18 +75,27 @@ while (1) { } $warnkids=0; - my $nodepend = driver_name eq 'mysql' - ? '' - : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. - ' WHERE queue_depend.jobnum = queue.jobnum ) '; + my $dbh = dbh; + unless ( $dbh->ping ) { + warn "WARNING: connection to database lost, reconnecting...\n"; + myconnect; + unless ( $dbh->ping ) { + warn "WARNING: still no connection to database, sleeping for retry...\n"; + sleep 10; + next; + } + } #my($job, $ljob); #{ # my $oldAutoCommit = $FS::UID::AutoCommit; # local $FS::UID::AutoCommit = 0; $FS::UID::AutoCommit = 0; - my $dbh = dbh; + my $nodepend = driver_name eq 'mysql' + ? '' + : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. + ' WHERE queue_depend.jobnum = queue.jobnum ) '; my $job = qsearchs( 'queue', { 'status' => 'new' }, -- 2.11.0