adding 1 second delay and retry on db connect failure -- this hack is to work around...
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 27 Jun 2007 20:41:47 +0000 (20:41 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 27 Jun 2007 20:41:47 +0000 (20:41 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_0@7479 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/c-apps/oils_cstore.c
Open-ILS/src/perlmods/OpenILS/Application/Storage/Driver/Pg.pm

index e41cf49..b96d814 100644 (file)
@@ -12,6 +12,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #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);
index ca53690..c6f35f6 100644 (file)
                                        "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);
                $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);