]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/mysql.c
Fix conio.h problem on Solaris
[bacula/bacula] / bacula / src / cats / mysql.c
index 48843840b51adc7e434b27da7275644271e20667..d327927c442bb6c81202fca03a8058981297946b 100644 (file)
@@ -56,8 +56,8 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  * never have errors, or it is really fatal.
  */
 B_DB *
-db_init_database(JCR *jcr, char *db_name, char *db_user, char *db_password, 
-                char *db_address, int db_port, char *db_socket) 
+db_init_database(JCR *jcr, const char *db_name, const char *db_user, const char *db_password, 
+                const char *db_address, int db_port, const char *db_socket) 
 {
    B_DB *mdb;
 
@@ -136,18 +136,8 @@ db_open_database(JCR *jcr, B_DB *mdb)
 #endif
    mysql_init(&(mdb->mysql));
    Dmsg0(50, "mysql_init done\n");
-   mdb->db = mysql_real_connect(
-       &(mdb->mysql),                /* db */
-       mdb->db_address,              /* default = localhost */
-       mdb->db_user,                 /*  login name */
-       mdb->db_password,             /*  password */
-       mdb->db_name,                 /* database name */
-       mdb->db_port,                 /* default port */
-       mdb->db_socket,               /* default = socket */
-       CLIENT_FOUND_ROWS);           /* flags */
-
-   /* If no connect, try once more in case it is a timing problem */
-   if (mdb->db == NULL) {
+   /* If connection fails, try at 5 sec intervals for 30 seconds. */
+   for (int retry=0; retry < 6; retry++) {
       mdb->db = mysql_real_connect(
           &(mdb->mysql),                /* db */
           mdb->db_address,              /* default = localhost */
@@ -157,6 +147,12 @@ db_open_database(JCR *jcr, B_DB *mdb)
           mdb->db_port,                 /* default port */
           mdb->db_socket,               /* default = socket */
           CLIENT_FOUND_ROWS);           /* flags */
+
+      /* If no connect, try once more in case it is a timing problem */
+      if (mdb->db != NULL) {
+        break;
+      }
+      bmicrosleep(5,0);
    }
     
    Dmsg0(50, "mysql_real_connect done\n");
@@ -316,13 +312,13 @@ unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from,
  * Submit a general SQL command (cmd), and for each row returned,
  *  the sqlite_handler is called with the ctx.
  */
-int db_sql_query(B_DB *mdb, char *query, DB_RESULT_HANDLER *result_handler, void *ctx)
+int db_sql_query(B_DB *mdb, const char *query, DB_RESULT_HANDLER *result_handler, void *ctx)
 {
    SQL_ROW row;
   
    db_lock(mdb);
    if (sql_query(mdb, query) != 0) {
-      Mmsg(&mdb->errmsg, _("Query failed: %s: ERR=%s\n"), query, sql_strerror(mdb));
+      Mmsg(mdb->errmsg, _("Query failed: %s: ERR=%s\n"), query, sql_strerror(mdb));
       db_unlock(mdb);
       return 0;
    }