]> git.sur5r.net Git - bacula/bacula/commitdiff
More db + sd error handling cleanup
authorKern Sibbald <kern@sibbald.com>
Wed, 4 Nov 2009 16:16:55 +0000 (17:16 +0100)
committerKern Sibbald <kern@sibbald.com>
Wed, 4 Nov 2009 16:16:55 +0000 (17:16 +0100)
bacula/src/cats/dbi.c
bacula/src/cats/postgresql.c
bacula/src/cats/sql.c
bacula/src/cats/sql_create.c
bacula/src/stored/dircmd.c
bacula/src/stored/fd_cmds.c

index 7cbfc1868f509fbc18e87026a560a2c0fdd07713..7a039ba2551fa59839dbc50b9e57daba7175cb04 100644 (file)
@@ -278,10 +278,9 @@ db_open_database(JCR *jcr, B_DB *mdb)
    }
 
    if ( dbstat != 0 ) {
-      Mmsg3(&mdb->errmsg, _("Unable to connect to DBI interface.\n"
-                       "Type=%s Database=%s User=%s\n"
-                       "It is probably not running or your password is incorrect.\n"),
-                        mdb->db_driver, mdb->db_name, mdb->db_user);
+      Mmsg3(&mdb->errmsg, _("Unable to connect to DBI interface. Type=%s Database=%s User=%s\n"
+         "Possible causes: SQL server not running; password incorrect; max_connections exceeded.\n"),
+         mdb->db_driver, mdb->db_name, mdb->db_user);
       V(mutex);
       return 0;
    }
index 969232734b4774de88de0e77e1d8cc81b290bc93..08f5846f9519ef11e440bdf1a7e8ec66fe9c55a1 100644 (file)
@@ -228,10 +228,9 @@ db_open_database(JCR *jcr, B_DB *mdb)
             mdb->db_password==NULL?"(NULL)":mdb->db_password);
 
    if (PQstatus(mdb->db) != CONNECTION_OK) {
-      Mmsg2(&mdb->errmsg, _("Unable to connect to PostgreSQL server.\n"
-            "Database=%s User=%s\n"
-            "It is probably not running or your password is incorrect.\n"),
-             mdb->db_name, mdb->db_user);
+      Mmsg2(&mdb->errmsg, _("Unable to connect to PostgreSQL server. Database=%s User=%s\n"
+         "Possible causes: SQL server not running; password incorrect; max_connections exceeded.\n"),
+         mdb->db_name, mdb->db_user);
       V(mutex);
       return 0;
    }
index 5872fa3087de792082216bde2cc2a757880a903d..72ab05b51212859d55c7832fb37143233b4ca365 100644 (file)
@@ -740,10 +740,10 @@ vertical_list:
  */
 bool db_open_batch_connexion(JCR *jcr, B_DB *mdb)
 {
-   int multi_db=false;
-
 #ifdef HAVE_BATCH_FILE_INSERT
-   multi_db=true;               /* we force a new connexion only if batch insert is enabled */
+   const int multi_db = true;   /* we force a new connection only if batch insert is enabled */
+#else
+   const int multi_db = false;
 #endif
 
    if (!jcr->db_batch) {
@@ -756,16 +756,15 @@ bool db_open_batch_connexion(JCR *jcr, B_DB *mdb)
                                       mdb->db_socket,
                                       multi_db /* multi_db = true when using batch mode */);
       if (!jcr->db_batch) {
-         Jmsg0(jcr, M_FATAL, 0, "Could not init batch connexion");
+         Mmsg0(&mdb->errmsg, _("Could not init database batch connection"));
+         Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg);
          return false;
       }
 
       if (!db_open_database(jcr, jcr->db_batch)) {
-         POOLMEM *errmsg = get_pool_memory(PM_MESSAGE);
-         Mmsg2(&errmsg,  _("Could not open database \"%s\": ERR=%s\n"),
+         Mmsg2(&mdb->errmsg,  _("Could not open database \"%s\": ERR=%s\n"),
               jcr->db_batch->db_name, db_strerror(jcr->db_batch));
-         Jmsg1(jcr, M_FATAL, 0, "%s", errmsg);
-         free_pool_memory(errmsg);
+         Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg);
          return false;
       }      
       Dmsg3(100, "initdb ref=%d connected=%d db=%p\n", jcr->db_batch->ref_count,
index c51261a0acc2221e3d3747cec29804e5298d120d..7dc11fb462a116763b43920dd985a9ca10bc0d79 100644 (file)
@@ -909,6 +909,10 @@ bool db_write_batch_file_records(JCR *jcr)
  *  is a single FileName record and a single Path record, no matter
  *  how many times it occurs.  This is this subroutine, we separate
  *  the file and the path and fill temporary tables with this three records.
+ *
+ *  Note: all routines that call this expect to be able to call
+ *    db_strerror(mdb) to get the error message, so the error message
+ *    MUST be edited into mdb->errmsg before returning an error status.
  */
 bool db_create_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar)
 {
@@ -917,14 +921,13 @@ bool db_create_file_attributes_record(JCR *jcr, B_DB *mdb, ATTR_DBR *ar)
 
    /* Open the dedicated connexion */
    if (!jcr->batch_started) {
-
       if (!db_open_batch_connexion(jcr, mdb)) {
-         return false;
+         return false;     /* error already printed */
       }
       if (!sql_batch_start(jcr, jcr->db_batch)) {
          Mmsg1(&mdb->errmsg, 
               "Can't start batch mode: ERR=%s", db_strerror(jcr->db_batch));
-         Jmsg1(jcr, M_FATAL, 0, "%s", mdb->errmsg);
+         Jmsg(jcr, M_FATAL, 0, "%s", mdb->errmsg);
          return false;
       }
       jcr->batch_started = true;
index c658f5d36d4d1b4bc38f507ccc4cee1c0ec626b5..8ce44e5beb9ab0dec053181ac8674fd244501fb6 100644 (file)
@@ -119,7 +119,7 @@ static struct s_cmds cmds[] = {
    {"status",      status_cmd,      1},
    {".status",     qstatus_cmd,     1},
    {"unmount",     unmount_cmd,     0},
-   {"action_on_purge", action_on_purge_cmd,    0},
+   {"action_on_purge",  action_on_purge_cmd,    0},
    {"use storage=", use_cmd,        0},
    {"run",         run_cmd,         0},
 // {"query",       query_cmd,       0},
@@ -327,7 +327,8 @@ static bool cancel_cmd(JCR *cjcr)
             Dmsg1(100, "JobId=%u broadcast wait_device_release\n", (uint32_t)jcr->JobId);
             pthread_cond_broadcast(&wait_device_release);
          }
-         Jmsg(jcr, M_INFO, 0, _("Job %s marked to be canceled.\n"), jcr->Job);
+         Jmsg(jcr, M_INFO, 0, _("JobId=%d Job=\"%s\" marked to be canceled.\n"), 
+            (int)jcr->JobId, jcr->Job);
          dir->fsend(_("3000 Job %s marked to be canceled.\n"), jcr->Job);
          free_jcr(jcr);
       }
index f096e5f4a8476d463be07c83b120d00d51c4b408..992d705e4dacbc158e37212ad5b52979df3ae636 100644 (file)
@@ -176,8 +176,10 @@ void do_fd_commands(JCR *jcr)
          }
       }
       if (!found) {                   /* command not found */
-         Jmsg1(jcr, M_FATAL, 0, _("FD command not found: %s\n"), fd->msg);
-         Dmsg1(110, "<filed: Command not found: %s\n", fd->msg);
+         if (!job_canceled(jcr)) {
+            Jmsg1(jcr, M_FATAL, 0, _("FD command not found: %s\n"), fd->msg);
+            Dmsg1(110, "<filed: Command not found: %s\n", fd->msg);
+         }
          fd->fsend(ferrmsg);
          break;
       }