From 6e8da8c47d2840d1d62a95e258198bbfb161f5be Mon Sep 17 00:00:00 2001 From: miker Date: Wed, 27 Jun 2007 20:31:14 +0000 Subject: [PATCH] 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/branches/rel_1_0_6@7477 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/c-apps/oils_cstore.c | 10 +++++-- .../OpenILS/Application/Storage/Driver/Pg.pm | 33 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/c-apps/oils_cstore.c b/Open-ILS/src/c-apps/oils_cstore.c index e41cf4950f..b96d81481f 100644 --- a/Open-ILS/src/c-apps/oils_cstore.c +++ b/Open-ILS/src/c-apps/oils_cstore.c @@ -12,6 +12,7 @@ #include #include #include +#include #ifdef RSTORE # define MODULENAME "open-ils.reporter-store" @@ -262,9 +263,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); -- 2.11.0