From: miker Date: Wed, 27 Jun 2007 20:41:40 +0000 (+0000) Subject: adding 1 second delay and retry on db connect failure -- this hack is to work around... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ced828df4c066ddd3ae603d484d09df1e1bc52aa;p=Evergreen.git adding 1 second delay and retry on db connect failure -- this hack is to work around transient pgpool issues git-svn-id: svn://svn.open-ils.org/ILS/trunk@7478 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/c-apps/oils_cstore.c b/Open-ILS/src/c-apps/oils_cstore.c index 12e03589e1..cd5abec230 100644 --- a/Open-ILS/src/c-apps/oils_cstore.c +++ b/Open-ILS/src/c-apps/oils_cstore.c @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef RSTORE # define MODULENAME "open-ils.reporter-store" @@ -250,9 +251,12 @@ int osrfAppChildInit() { const char* err; if (dbi_conn_connect(writehandle) < 0) { - dbi_conn_error(writehandle, &err); - osrfLogError( OSRF_LOG_MARK, "Error connecting to database: %s", err); - return -1; + sleep(1); + if (dbi_conn_connect(writehandle) < 0) { + dbi_conn_error(writehandle, &err); + osrfLogError( OSRF_LOG_MARK, "Error connecting to database: %s", err); + return -1; + } } osrfLogInfo(OSRF_LOG_MARK, "%s successfully connected to the database", MODULENAME); diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Driver/Pg.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Driver/Pg.pm index ca53690ee7..c6f35f6292 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Driver/Pg.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Driver/Pg.pm @@ -71,11 +71,20 @@ "dbname=$$master{db}", $$master{user}, $$master{pw}, - \%attrs) || - throw OpenSRF::EX::ERROR - ("Couldn't connect to $$master{db}". - " on $$master{host}::$$master{port}". - " as $$master{user}!!"); + \%attrs) + || do { sleep(1); + DBI->connect( + "dbi:Pg:". + "host=$$master{host};". + "port=$$master{port};". + "dbname=$$master{db}", + $$master{user}, + $$master{pw}, + \%attrs) } + || throw OpenSRF::EX::ERROR + ("Couldn't connect to $$master{db}". + " on $$master{host}::$$master{port}". + " as $$master{user}!!"); } catch Error with { my $e = shift; $log->debug("Error connecting to database:\n\t$e\n\t$DBI::errstr", ERROR); @@ -87,7 +96,19 @@ $master_db->do("SET NAMES '$$master{client_encoding}';") if ($$master{client_encoding}); for my $db (@$_db_params) { - push @slave_dbs, DBI->connect("dbi:Pg:host=$$db{host};dbname=$$db{db}",$$db{user},$$db{pw}, \%attrs); + try { + push @slave_dbs, DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}",$$db{user},$$db{pw}, \%attrs) + || do { sleep(1); DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}",$$db{user},$$db{pw}, \%attrs) } + || throw OpenSRF::EX::ERROR + ("Couldn't connect to $$db{db}". + " on $$db{host}::$$db{port}". + " as $$db{user}!!"); + } catch Error with { + my $e = shift; + $log->debug("Error connecting to database:\n\t$e\n\t$DBI::errstr", ERROR); + throw $e; + }; + $slave_dbs[-1]->do("SET NAMES '$$db{client_encoding}';") if ($$master{client_encoding}); $log->debug("Connected to MASTER db '$$master{db} at $$master{host}", INFO);