]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Add some SD debug code.
authorKern Sibbald <kern@sibbald.com>
Fri, 4 Jul 2008 18:18:15 +0000 (18:18 +0000)
committerKern Sibbald <kern@sibbald.com>
Fri, 4 Jul 2008 18:18:15 +0000 (18:18 +0000)
kes  Do find_a_volume() each time an unload is done.
kes  Apply Joao's DBI patch that adds easier configuration of DBI drivers,
     and adds --with-db-port to ./configure.
kes  Use Qmsg() in job.c watchdog callback.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7308 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/autoconf/bacula-macros/db.m4
bacula/autoconf/configure.in
bacula/configure
bacula/src/dird/bacula-dir.conf.in
bacula/src/dird/job.c
bacula/src/lib/jcr.c
bacula/src/lib/rwlock.c
bacula/src/lib/watchdog.c
bacula/src/version.h
bacula/technotes-2.5

index 7e1a043c42bc98a667a8187a82d7ceda950e7b2b..4ff0db9f776bc15a7f4c9b9100f09ad8dc5248c7 100644 (file)
@@ -104,6 +104,7 @@ AC_ARG_WITH(dbi,
      support_dbi=yes
      db_type=DBI
      DB_TYPE=dbi
+     uncomment_dbi=" "
 
   else
      AC_MSG_RESULT(no)
@@ -115,6 +116,7 @@ AC_SUBST(SQL_LFLAGS)
 AC_SUBST(SQL_INCLUDE)
 AC_SUBST(SQL_BINDIR)
 AC_SUBST(DBI_DBD_DRIVERDIR)  
+AC_SUBST(uncomment_dbi)
 
 ])
 
index fbe179b313395e51c419dbcc67470492803f740c..ad5564c12481ae5f16782617f7a6de2daefd7625 100644 (file)
@@ -1252,6 +1252,20 @@ AC_ARG_WITH(db_password,
 )
 AC_SUBST(db_password)
 
+#
+# Pickup a database port
+#
+db_port=" "
+AC_ARG_WITH(db_port,
+    [  --with-db-port=DBPORT            specify a database port (default null)],
+    [
+        if test "x$withval" != "x" ; then
+            db_port=$withval
+       fi
+    ]
+)
+AC_SUBST(db_port)
+
 #
 # Handle users and groups for each daemon
 #
@@ -1405,9 +1419,14 @@ if test x$DB_TYPE = xdbi; then
        else
         support_batch_insert=yes
       fi])
-   fi  
+   fi
+else 
+# If dbi was not chosen, let the comment in file
+uncomment_dbi="#"  
 fi
 
+AC_SUBST(uncomment_dbi)
+
 if test $support_batch_insert = yes ; then
    AC_DEFINE(HAVE_BATCH_FILE_INSERT, 1, [Set if DB batch insert code enabled])
 fi
@@ -2463,6 +2482,7 @@ Configuration on `date`:
   Statically Linked DIR:      ${support_static_dir}
   Statically Linked CONS:     ${support_static_cons}
   Database type:             ${db_type}
+  Database port:          ${db_port}
   Database lib:              ${DB_LIBS}
   Database name:             ${db_name}
   Database user:             ${db_user}
index 565f72d11607c342949444ea022af87a9aa07d36..deb5ff1966c886c045befd39fc18a87ce8f862fd 100755 (executable)
@@ -824,6 +824,7 @@ mon_sd_password
 db_name
 db_user
 db_password
+db_port
 dir_user
 dir_group
 sd_user
@@ -835,6 +836,7 @@ SQL_LFLAGS
 SQL_INCLUDE
 SQL_BINDIR
 DBI_DBD_DRIVERDIR
+uncomment_dbi
 DB_PROG
 DB_PROG_LIB
 cats
@@ -1515,6 +1517,7 @@ Optional Packages:
   --with-db-name=DBNAME               specify database name (default bacula)
   --with-db-user=UNAME        specify database user (default bacula)
   --with-db-password=UNAME        specify database password (default *none*)
+  --with-db-port=DBPORT            specify a database port (default null)
   --with-dir-user=USER          specify user for Director daemon
   --with-dir-group=GROUP                specify group for Director daemon
   --with-sd-user=USER           specify user for Storage daemon
 
 
 
+#
+# Pickup a database port
+#
+db_port=" "
+
+# Check whether --with-db_port was given.
+if test "${with_db_port+set}" = set; then
+  withval=$with_db_port;
+        if test "x$withval" != "x" ; then
+            db_port=$withval
+       fi
+
+
+fi
+
+
+
 #
 # Handle users and groups for each daemon
 #
@@ -18009,6 +18029,7 @@ echo "${ECHO_T}yes" >&6; }
      support_dbi=yes
      db_type=DBI
      DB_TYPE=dbi
+     uncomment_dbi=" "
 
   else
      { echo "$as_me:$LINENO: result: no" >&5
@@ -18030,6 +18051,7 @@ fi
 
 
 
+
 db_found=no
 db_prog=no
 { echo "$as_me:$LINENO: checking for DBI drivers support" >&5
@@ -18222,8 +18244,13 @@ if test "${enable_batch_insert+set}" = set; then
 fi
 
    fi
+else
+# If dbi was not chosen, let the comment in file
+uncomment_dbi="#"
 fi
 
+
+
 if test $support_batch_insert = yes ; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -31509,6 +31536,7 @@ mon_sd_password!$mon_sd_password$ac_delim
 db_name!$db_name$ac_delim
 db_user!$db_user$ac_delim
 db_password!$db_password$ac_delim
+db_port!$db_port$ac_delim
 dir_user!$dir_user$ac_delim
 dir_group!$dir_group$ac_delim
 sd_user!$sd_user$ac_delim
@@ -31520,6 +31548,7 @@ SQL_LFLAGS!$SQL_LFLAGS$ac_delim
 SQL_INCLUDE!$SQL_INCLUDE$ac_delim
 SQL_BINDIR!$SQL_BINDIR$ac_delim
 DBI_DBD_DRIVERDIR!$DBI_DBD_DRIVERDIR$ac_delim
+uncomment_dbi!$uncomment_dbi$ac_delim
 DB_PROG!$DB_PROG$ac_delim
 DB_PROG_LIB!$DB_PROG_LIB$ac_delim
 cats!$cats$ac_delim
@@ -31550,7 +31579,7 @@ DISTVER!$DISTVER$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 59; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 61; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
@@ -32241,6 +32270,7 @@ Configuration on `date`:
   Statically Linked DIR:      ${support_static_dir}
   Statically Linked CONS:     ${support_static_cons}
   Database type:             ${db_type}
+  Database port:          ${db_port}
   Database lib:              ${DB_LIBS}
   Database name:             ${db_name}
   Database user:             ${db_user}
index b39bd408d0044b9f2aae44e8033782069f78a6d4..c39275d5d0803d7158563dae1d91b1daebeb59f3 100644 (file)
@@ -232,7 +232,7 @@ Storage {
 Catalog {
   Name = MyCatalog
 # Uncomment the following line if you want the dbi driver
-# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = 3306
+@uncomment_dbi@ dbdriver = "dbi:@DB_TYPE@"; dbaddress = 127.0.0.1; dbport = @db_port@
   dbname = "@db_name@"; dbuser = "@db_user@"; dbpassword = "@db_password@"
 }
 
index 0c735578dd62b5ec7bfcddee1c378e437d4e3b7f..59a83d760c6866fb6b65b78673cd42d9f2d49947 100644 (file)
@@ -501,17 +501,17 @@ static void job_monitor_watchdog(watchdog_t *self)
       /* check MaxWaitTime */
       if (job_check_maxwaittime(jcr)) {
          set_jcr_job_status(jcr, JS_Canceled);
-         Jmsg(jcr, M_FATAL, 0, _("Max wait time exceeded. Job canceled.\n"));
+         Qmsg(jcr, M_FATAL, 0, _("Max wait time exceeded. Job canceled.\n"));
          cancel = true;
       /* check MaxRunTime */
       } else if (job_check_maxruntime(jcr)) {
          set_jcr_job_status(jcr, JS_Canceled);
-         Jmsg(jcr, M_FATAL, 0, _("Max run time exceeded. Job canceled.\n"));
+         Qmsg(jcr, M_FATAL, 0, _("Max run time exceeded. Job canceled.\n"));
          cancel = true;
       /* check MaxRunSchedTime */ 
       } else if (job_check_maxschedruntime(jcr)) {
          set_jcr_job_status(jcr, JS_Canceled);
-         Jmsg(jcr, M_FATAL, 0, _("Max sched run time exceeded. Job canceled.\n"));
+         Qmsg(jcr, M_FATAL, 0, _("Max sched run time exceeded. Job canceled.\n"));
          cancel = true;
       }
 
index 1e97a4e12cc0a26592c6d661732dbafcfc2c93ad..1fb6b9823520b8f22dea4143dc033365282128e1 100644 (file)
@@ -424,7 +424,7 @@ void free_jcr(JCR *jcr)
    lock_jcr_chain();
    jcr->dec_use_count();              /* decrement use count */
    if (jcr->use_count() < 0) {
-      Emsg2(M_ERROR, 0, _("JCR use_count=%d JobId=%d\n"),
+      Jmsg2(jcr, M_ERROR, 0, _("JCR use_count=%d JobId=%d\n"),
          jcr->use_count(), jcr->JobId);
    }
    if (jcr->JobId > 0) {
@@ -484,8 +484,8 @@ void free_jcr(JCR *jcr)
       break;
    default:
       break;
-
    }
+
    if (jcr->daemon_free_jcr) {
       jcr->daemon_free_jcr(jcr);      /* call daemon free routine */
    }
@@ -825,7 +825,7 @@ bool init_jcr_subsystem(void)
 static void jcr_timeout_check(watchdog_t *self)
 {
    JCR *jcr;
-   BSOCK *fd;
+   BSOCK *bs;
    time_t timer_start;
 
    Dmsg0(dbglvl, "Start JCR timeout checks\n");
@@ -838,37 +838,37 @@ static void jcr_timeout_check(watchdog_t *self)
       if (jcr->JobId == 0) {
          continue;
       }
-      fd = jcr->store_bsock;
-      if (fd) {
-         timer_start = fd->timer_start;
-         if (timer_start && (watchdog_time - timer_start) > fd->timeout) {
-            fd->timer_start = 0;      /* turn off timer */
-            fd->set_timed_out();
-            Jmsg(jcr, M_ERROR, 0, _(
+      bs = jcr->store_bsock;
+      if (bs) {
+         timer_start = bs->timer_start;
+         if (timer_start && (watchdog_time - timer_start) > bs->timeout) {
+            bs->timer_start = 0;      /* turn off timer */
+            bs->set_timed_out();
+            Qmsg(jcr, M_ERROR, 0, _(
 "Watchdog sending kill after %d secs to thread stalled reading Storage daemon.\n"),
                  watchdog_time - timer_start);
             pthread_kill(jcr->my_thread_id, TIMEOUT_SIGNAL);
          }
       }
-      fd = jcr->file_bsock;
-      if (fd) {
-         timer_start = fd->timer_start;
-         if (timer_start && (watchdog_time - timer_start) > fd->timeout) {
-            fd->timer_start = 0;      /* turn off timer */
-            fd->set_timed_out();
-            Jmsg(jcr, M_ERROR, 0, _(
+      bs = jcr->file_bsock;
+      if (bs) {
+         timer_start = bs->timer_start;
+         if (timer_start && (watchdog_time - timer_start) > bs->timeout) {
+            bs->timer_start = 0;      /* turn off timer */
+            bs->set_timed_out();
+            Qmsg(jcr, M_ERROR, 0, _(
 "Watchdog sending kill after %d secs to thread stalled reading File daemon.\n"),
                  watchdog_time - timer_start);
             pthread_kill(jcr->my_thread_id, TIMEOUT_SIGNAL);
          }
       }
-      fd = jcr->dir_bsock;
-      if (fd) {
-         timer_start = fd->timer_start;
-         if (timer_start && (watchdog_time - timer_start) > fd->timeout) {
-            fd->timer_start = 0;      /* turn off timer */
-            fd->set_timed_out();
-            Jmsg(jcr, M_ERROR, 0, _(
+      bs = jcr->dir_bsock;
+      if (bs) {
+         timer_start = bs->timer_start;
+         if (timer_start && (watchdog_time - timer_start) > bs->timeout) {
+            bs->timer_start = 0;      /* turn off timer */
+            bs->set_timed_out();
+            Qmsg(jcr, M_ERROR, 0, _(
 "Watchdog sending kill after %d secs to thread stalled reading Director.\n"),
                  watchdog_time - timer_start);
             pthread_kill(jcr->my_thread_id, TIMEOUT_SIGNAL);
index 692f02d2c6b4e40155e8a52a50c64ff2c044aa20..563752c0b88c30bd087e6d7518dc8b897cc7e1f4 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2001-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2001-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -294,11 +294,13 @@ int rwl_writeunlock(brwlock_t *rwl)
       return stat;
    }
    if (rwl->w_active <= 0) {
-      Emsg0(M_ABORT, 0, _("rwl_writeunlock called too many times.\n"));
+      pthread_mutex_unlock(&rwl->mutex);
+      Jmsg0(NULL, M_ABORT, 0, _("rwl_writeunlock called too many times.\n"));
    }
    rwl->w_active--;
    if (!pthread_equal(pthread_self(), rwl->writer_id)) {
-      Emsg0(M_ABORT, 0, _("rwl_writeunlock by non-owner.\n"));
+      pthread_mutex_unlock(&rwl->mutex);
+      Jmsg0(NULL, M_ABORT, 0, _("rwl_writeunlock by non-owner.\n"));
    }
    if (rwl->w_active > 0) {
       stat = 0;                       /* writers still active */
@@ -364,7 +366,7 @@ void *thread_routine(void *arg)
          status = rwl_writelock(&data[element].lock);
          if (status != 0) {
             berrno be;
-            Emsg1(M_ABORT, 0, _("Write lock failed. ERR=%s\n"), be.bstrerror(status));
+            Jmsg1(NULL, M_ABORT, 0, _("Write lock failed. ERR=%s\n"), be.bstrerror(status));
          }
          data[element].data = self->thread_num;
          data[element].writes++;
@@ -372,7 +374,7 @@ void *thread_routine(void *arg)
          status = rwl_writeunlock(&data[element].lock);
          if (status != 0) {
             berrno be;
-            Emsg1(M_ABORT, 0, _("Write unlock failed. ERR=%s\n"), be.bstrerror(status));
+            Jmsg1(NULL, M_ABORT, 0, _("Write unlock failed. ERR=%s\n"), be.bstrerror(status));
          }
       } else {
          /*
@@ -383,7 +385,7 @@ void *thread_routine(void *arg)
           status = rwl_readlock(&data[element].lock);
           if (status != 0) {
              berrno be;
-             Emsg1(M_ABORT, 0, _("Read lock failed. ERR=%s\n"), be.bstrerror(status));
+             Jmsg1(NULL, M_ABORT, 0, _("Read lock failed. ERR=%s\n"), be.bstrerror(status));
           }
           self->reads++;
           if (data[element].data == self->thread_num)
@@ -391,7 +393,7 @@ void *thread_routine(void *arg)
           status = rwl_readunlock(&data[element].lock);
           if (status != 0) {
              berrno be;
-             Emsg1(M_ABORT, 0, _("Read unlock failed. ERR=%s\n"), be.bstrerror(status));
+             Jmsg1(NULL, M_ABORT, 0, _("Read unlock failed. ERR=%s\n"), be.bstrerror(status));
           }
       }
       element++;
@@ -433,7 +435,7 @@ int main (int argc, char *argv[])
         status = rwl_init (&data[data_count].lock);
         if (status != 0) {
            berrno be;
-           Emsg1(M_ABORT, 0, _("Init rwlock failed. ERR=%s\n"), be.bstrerror(status));
+           Jmsg1(NULL, M_ABORT, 0, _("Init rwlock failed. ERR=%s\n"), be.bstrerror(status));
         }
     }
 
@@ -449,7 +451,7 @@ int main (int argc, char *argv[])
             NULL, thread_routine, (void*)&threads[count]);
         if (status != 0) {
            berrno be;
-           Emsg1(M_ABORT, 0, _("Create thread failed. ERR=%s\n"), be.bstrerror(status));
+           Jmsg1(NULL, M_ABORT, 0, _("Create thread failed. ERR=%s\n"), be.bstrerror(status));
         }
     }
 
@@ -461,7 +463,7 @@ int main (int argc, char *argv[])
         status = pthread_join (threads[count].thread_id, NULL);
         if (status != 0) {
            berrno be;
-           Emsg1(M_ABORT, 0, _("Join thread failed. ERR=%s\n"), be.bstrerror(status));
+           Jmsg1(NULL, M_ABORT, 0, _("Join thread failed. ERR=%s\n"), be.bstrerror(status));
         }
         thread_writes += threads[count].writes;
         printf (_("%02d: interval %d, writes %d, reads %d\n"),
index 47e90cf6f0708eab65a465b28138f1e379e58ed6..72263d92cd422765fc848dee578b9adc627897d1 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2002-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2002-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -80,7 +80,7 @@ int start_watchdog(void)
 
    if ((errstat=rwl_init(&lock)) != 0) {
       berrno be;
-      Emsg1(M_ABORT, 0, _("Unable to initialize watchdog lock. ERR=%s\n"),
+      Jmsg1(NULL, M_ABORT, 0, _("Unable to initialize watchdog lock. ERR=%s\n"),
             be.bstrerror(errstat));
    }
    wd_queue = New(dlist(dummy, &dummy->link));
@@ -177,13 +177,13 @@ watchdog_t *new_watchdog(void)
 bool register_watchdog(watchdog_t *wd)
 {
    if (!wd_is_init) {
-      Emsg0(M_ABORT, 0, _("BUG! register_watchdog called before start_watchdog\n"));
+      Jmsg0(NULL, M_ABORT, 0, _("BUG! register_watchdog called before start_watchdog\n"));
    }
    if (wd->callback == NULL) {
-      Emsg1(M_ABORT, 0, _("BUG! Watchdog %p has NULL callback\n"), wd);
+      Jmsg1(NULL, M_ABORT, 0, _("BUG! Watchdog %p has NULL callback\n"), wd);
    }
    if (wd->interval == 0) {
-      Emsg1(M_ABORT, 0, _("BUG! Watchdog %p has zero interval\n"), wd);
+      Jmsg1(NULL, M_ABORT, 0, _("BUG! Watchdog %p has zero interval\n"), wd);
    }
 
    wd_lock();
@@ -203,7 +203,7 @@ bool unregister_watchdog(watchdog_t *wd)
    bool ok = false;
 
    if (!wd_is_init) {
-      Emsg0(M_ABORT, 0, _("BUG! unregister_watchdog_unlocked called before start_watchdog\n"));
+      Jmsg0(NULL, M_ABORT, 0, _("BUG! unregister_watchdog_unlocked called before start_watchdog\n"));
    }
 
    wd_lock();
@@ -322,7 +322,7 @@ static void wd_lock()
    int errstat;
    if ((errstat=rwl_writelock(&lock)) != 0) {
       berrno be;
-      Emsg1(M_ABORT, 0, _("rwl_writelock failure. ERR=%s\n"),
+      Jmsg1(NULL, M_ABORT, 0, _("rwl_writelock failure. ERR=%s\n"),
            be.bstrerror(errstat));
    }
 }
@@ -337,7 +337,7 @@ static void wd_unlock()
    int errstat;
    if ((errstat=rwl_writeunlock(&lock)) != 0) {
       berrno be;
-      Emsg1(M_ABORT, 0, _("rwl_writeunlock failure. ERR=%s\n"),
+      Jmsg1(NULL, M_ABORT, 0, _("rwl_writeunlock failure. ERR=%s\n"),
            be.bstrerror(errstat));
    }
 }
index 6c1ddaf4eaef0abcd9372f027d3aa24f1fd1db1b..fba4a3771ea4d1f8f977a240c995c49366606553 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.5.1"
-#define BDATE   "02 July 2008"
-#define LSMDATE "02Jul08"
+#define BDATE   "04 July 2008"
+#define LSMDATE "04Jul08"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2008"       /* year for copyright messages in progs */
index e7fc04530287c831acafd42e48731e0a867178c9..236aee1588f6e90cf99985ba685b3edaef7ba9ec 100644 (file)
@@ -30,7 +30,17 @@ vtape driver
 
 
 General:
+04Jul08
+kes  Add some SD debug code.
+kes  Do find_a_volume() each time an unload is done.
+kes  Apply Joao's DBI patch that adds easier configuration of DBI drivers,
+     and adds --with-db-port to ./configure.
+kes  Use Qmsg() in job.c watchdog callback.
 03Jul08
+kes  Release main control rwlock if ABORTing.
+kes  Make watchdog connect timeout queue messages rather than sending
+     directly to avoid lock conflicts with the real thread.
+kes  Add const char in dbd.c to avoid compiler warnings.
 kes  Fix python compiler string warning. Note, IMO the GNU C++ 
      compiler guys have made a *very* bad change to their compiler.
      They now force all strings to be 'const' unless you explicitly