]> git.sur5r.net Git - bacula/bacula/commitdiff
Add retry for SQLite opening db if it fails.
authorKern Sibbald <kern@sibbald.com>
Wed, 26 Sep 2007 17:25:03 +0000 (17:25 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 26 Sep 2007 17:25:03 +0000 (17:25 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5658 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/cats/sqlite.c
bacula/technotes-2.3

index 0fd4d0d7e26dec9ed9a4e03540f5cfc9d6f7077e..9b0ede7ac9878d2cb5d04eb2abc138d7a4bcc3c0 100644 (file)
@@ -148,6 +148,7 @@ db_open_database(JCR *jcr, B_DB *mdb)
    int len;
    struct stat statbuf;
    int errstat;
+   int retry = 0;
 
    P(mutex);
    if (mdb->connected) {
@@ -178,28 +179,28 @@ db_open_database(JCR *jcr, B_DB *mdb)
       return 0;
    }
 
+   for (mdb->db=NULL; !mdb->db && retry++ < 10; ) {
 #ifdef HAVE_SQLITE3
-   int stat = sqlite3_open(db_name, &mdb->db);
-   if (stat != SQLITE_OK) {
-      mdb->sqlite_errmsg = (char *)sqlite3_errmsg(mdb->db); 
-      sqlite3_close(mdb->db);
-      mdb->db = NULL;
-   } else {
-      mdb->sqlite_errmsg = NULL;
-   }
-#ifdef SQLITE3_INIT_QUERY
-   db_sql_query(mdb, SQLITE3_INIT_QUERY, NULL, NULL);
-#endif
-
+      int stat = sqlite3_open(db_name, &mdb->db);
+      if (stat != SQLITE_OK) {
+         mdb->sqlite_errmsg = (char *)sqlite3_errmsg(mdb->db); 
+         sqlite3_close(mdb->db);
+         mdb->db = NULL;
+      } else {
+         mdb->sqlite_errmsg = NULL;
+      }
 #else
-   mdb->db = sqlite_open(
-        db_name,                      /* database name */
-        644,                          /* mode */
-        &mdb->sqlite_errmsg);         /* error message */
+      mdb->db = sqlite_open(
+           db_name,                      /* database name */
+           644,                          /* mode */
+           &mdb->sqlite_errmsg);         /* error message */
 #endif
 
-   Dmsg0(300, "sqlite_open\n");
-
+      Dmsg0(300, "sqlite_open\n");
+      if (!mdb->db) {
+         bmicrosleep(1, 0);
+      }
+   }
    if (mdb->db == NULL) {
       Mmsg2(&mdb->errmsg, _("Unable to open Database=%s. ERR=%s\n"),
          db_name, mdb->sqlite_errmsg ? mdb->sqlite_errmsg : _("unknown"));
@@ -209,6 +210,11 @@ db_open_database(JCR *jcr, B_DB *mdb)
    }       
    mdb->connected = true;
    free(db_name);
+
+#if  defined(HAVE_SQLITE3) && defined(SQLITE3_INIT_QUERY)
+   db_sql_query(mdb, SQLITE3_INIT_QUERY, NULL, NULL);
+#endif
+
    if (!check_tables_version(jcr, mdb)) {
       V(mutex);
       return 0;
index 7d39cbe6ef9fa707120c581696beb55eefd831f7..e10e081db1365ce93d0db5790367b21801acad55 100644 (file)
@@ -2,7 +2,7 @@
 
 General:
 26Sep07
-kes  Add retry for opening batch db if it fails.
+kes  Add retry for SQLite opening db if it fails. 
 kes  Suppress extra error messages during batch insert failure.
 kes  Add jcr to timer packets so if killed message can be sent to job.
 kes  Add JobId to all Dmsg() output.