]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Make first cut attempt to correct SQL that computes the current
authorKern Sibbald <kern@sibbald.com>
Thu, 25 Sep 2008 13:23:58 +0000 (13:23 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 25 Sep 2008 13:23:58 +0000 (13:23 +0000)
     Pool usage.  This is to fix bug #1159.
kes  Do a bunch of plugin cleanups for Win32 and more careful checking
     of PluginDirectory and whether or not a plugin was found.

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

bacula/src/dird/migrate.c
bacula/src/filed/fd_plugins.c
bacula/src/lib/alist.c
bacula/src/lib/alist.h
bacula/src/lib/htable.c
bacula/src/lib/plugins.c
bacula/technotes-2.5

index de7c383c728a9b1467f5e1bdef51bb74e6acbb7f..f692e713fa9c2f14efd4f202fd62b5b824b12e99 100644 (file)
@@ -560,9 +560,19 @@ const char *sql_jobids_from_mediaid =
 
 /* Get the number of bytes in the pool */
 const char *sql_pool_bytes =
+   "SELECT SUM(JobBytes) FROM Job WHERE JobId IN"
+   " (SELECT DISTINCT Job.JobId from Pool,Job,Media,JobMedia WHERE"
+   " Pool.Name='%s' AND Media.PoolId=Pool.PoolId AND"
+   " VolStatus in ('Full','Used','Error','Append') AND Media.Enabled=1 AND"
+   " Job.Type='B' AND"
+   " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId)";
+
+#ifdef xxx
+/* Broken */
    "SELECT SUM(VolBytes) FROM Media,Pool WHERE"
    " VolStatus in ('Full','Used','Error','Append') AND Media.Enabled=1 AND"
    " Media.PoolId=Pool.PoolId AND Pool.Name='%s'";
+#endif
 
 /* Get the number of bytes in the Jobs */
 const char *sql_job_bytes =
index d72f7700f1144993298c260c59aa98a6dacad4cf..135c2fbeddb2090a5ba5b94c09bf2d2451f52d89 100644 (file)
 #include "filed.h"
 
 const int dbglvl = 50;
+#ifdef HAVE_WIN32
+const char *plugin_type = "-fd.dll";
+#else
 const char *plugin_type = "-fd.so";
+#endif
 
 extern int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level);
 
@@ -90,7 +94,7 @@ void generate_plugin_event(JCR *jcr, bEventType eventType, void *value)
    Plugin *plugin;
    int i = 0;
 
-   if (!plugin_list) {
+   if (!plugin_list || !jcr->plugin_ctx_list) {
       return;                         /* Return if no plugins loaded */
    }
 
@@ -136,7 +140,7 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    struct save_pkt sp;
    bEvent event;
 
-   if (!plugin_list) {
+   if (!plugin_list || !jcr->plugin_ctx_list) {
       return 1;                            /* Return if no plugins loaded */
    }
 
@@ -244,6 +248,9 @@ void plugin_name_stream(JCR *jcr, char *name)
    int len;
    int i = 0;
    bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list;
+   if (!plugin_ctx_list) {
+      goto bail_out;
+   }
 
    Dmsg1(100, "Read plugin stream string=%s\n", name);
    skip_nonspaces(&p);             /* skip over jcr->JobFiles */
@@ -375,7 +382,14 @@ void load_fd_plugins(const char *plugin_dir)
    }
 
    plugin_list = New(alist(10, not_owned_by_alist));
-   load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type);
+   if (!load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type)) {
+      /* Either none found, or some error */
+      if (plugin_list->size() == 0) {
+         delete plugin_list;
+         plugin_list = NULL;
+         return;
+      }
+   }
 
    /* Plug entry points called from findlib */
    plugin_bopen  = my_plugin_bopen;
@@ -391,6 +405,8 @@ void load_fd_plugins(const char *plugin_dir)
 
 /*
  * Create a new instance of each plugin for this Job
+ *   Note, plugin_list can exist but jcr->plugin_ctx_list can
+ *   be NULL if no plugins were loaded.
  */
 void new_plugins(JCR *jcr)
 {
@@ -427,8 +443,8 @@ void free_plugins(JCR *jcr)
    Plugin *plugin;
    int i = 0;
 
-   if (!plugin_list) {
-      return;
+   if (!plugin_list || !jcr->plugin_ctx_list) {
+      return;                         /* no plugins, nothing to do */
    }
 
    bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list;
index 7f99ad30d9f175ab545d621c6719948b02b6606a..7b53dfe8bc0a0c5b206c787ca4f6c2538a2b58c8 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2003-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2003-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.
index 5658cb70754cdf415f4cf1602daf4483d01345db..d19bf5393c3a8fbe08b99585df24d02818398298 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2003-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2003-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.
index c08527e7b9be799cbe6fc8a9f5e2cde11cd6227b..ee56f875a4bd0d0fa3f668c1acd4ded4ba9e0ad5 100644 (file)
@@ -54,6 +54,8 @@
 
 #include "htable.h"
 
+static const int dbglvl = 500;
+
 /* ===================================================================
  *    htable
  */
@@ -137,7 +139,7 @@ void htable::hash_index(char *key)
    }
    /* Multiply by large prime number, take top bits, mask for remainder */
    index = ((hash * 1103515249) >> rshift) & mask;
-   Dmsg2(500, "Leave hash_index hash=0x%x index=%d\n", hash, index);
+   Dmsg2(dbglvl, "Leave hash_index hash=0x%x index=%d\n", hash, index);
 }
 
 /*
@@ -276,22 +278,22 @@ bool htable::insert(char *key, void *item)
       return false;                   /* already exists */
    }
    ASSERT(index < buckets);
-   Dmsg2(500, "Insert: hash=%p index=%d\n", hash, index);
+   Dmsg2(dbglvl, "Insert: hash=%p index=%d\n", hash, index);
    hp = (hlink *)(((char *)item)+loffset);
-   Dmsg4(500, "Insert hp=%p index=%d item=%p offset=%u\n", hp,
+   Dmsg4(dbglvl, "Insert hp=%p index=%d item=%p offset=%u\n", hp,
       index, item, loffset);
    hp->next = table[index];
    hp->hash = hash;
    hp->key = key;
    table[index] = hp;
-   Dmsg3(500, "Insert hp->next=%p hp->hash=0x%x hp->key=%s\n",
+   Dmsg3(dbglvl, "Insert hp->next=%p hp->hash=0x%x hp->key=%s\n",
       hp->next, hp->hash, hp->key);
 
    if (++num_items >= max_items) {
-      Dmsg2(500, "num_items=%d max_items=%d\n", num_items, max_items);
+      Dmsg2(dbglvl, "num_items=%d max_items=%d\n", num_items, max_items);
       grow_table();
    }
-   Dmsg3(500, "Leave insert index=%d num_items=%d key=%s\n", index, num_items, key);
+   Dmsg3(dbglvl, "Leave insert index=%d num_items=%d key=%s\n", index, num_items, key);
    return true;
 }
 
@@ -301,7 +303,7 @@ void *htable::lookup(char *key)
    for (hlink *hp=table[index]; hp; hp=(hlink *)hp->next) {
 //    Dmsg2(100, "hp=%p key=%s\n", hp, hp->key);
       if (hash == hp->hash && strcmp(key, hp->key) == 0) {
-         Dmsg1(500, "lookup return %p\n", ((char *)hp)-loffset);
+         Dmsg1(dbglvl, "lookup return %p\n", ((char *)hp)-loffset);
          return ((char *)hp)-loffset;
       }
    }
@@ -310,43 +312,43 @@ void *htable::lookup(char *key)
 
 void *htable::next()
 {
-   Dmsg1(500, "Enter next: walkptr=%p\n", walkptr);
+   Dmsg1(dbglvl, "Enter next: walkptr=%p\n", walkptr);
    if (walkptr) {
       walkptr = (hlink *)(walkptr->next);
    }
    while (!walkptr && walk_index < buckets) {
       walkptr = table[walk_index++];
       if (walkptr) {
-         Dmsg3(500, "new walkptr=%p next=%p inx=%d\n", walkptr,
+         Dmsg3(dbglvl, "new walkptr=%p next=%p inx=%d\n", walkptr,
             walkptr->next, walk_index-1);
       }
    }
    if (walkptr) {
-      Dmsg2(500, "next: rtn %p walk_index=%d\n",
+      Dmsg2(dbglvl, "next: rtn %p walk_index=%d\n",
          ((char *)walkptr)-loffset, walk_index);
       return ((char *)walkptr)-loffset;
    }
-   Dmsg0(500, "next: return NULL\n");
+   Dmsg0(dbglvl, "next: return NULL\n");
    return NULL;
 }
 
 void *htable::first()
 {
-   Dmsg0(500, "Enter first\n");
+   Dmsg0(dbglvl, "Enter first\n");
    walkptr = table[0];                /* get first bucket */
    walk_index = 1;                    /* Point to next index */
    while (!walkptr && walk_index < buckets) {
       walkptr = table[walk_index++];  /* go to next bucket */
       if (walkptr) {
-         Dmsg3(500, "first new walkptr=%p next=%p inx=%d\n", walkptr,
+         Dmsg3(dbglvl, "first new walkptr=%p next=%p inx=%d\n", walkptr,
             walkptr->next, walk_index-1);
       }
    }
    if (walkptr) {
-      Dmsg1(500, "Leave first walkptr=%p\n", walkptr);
+      Dmsg1(dbglvl, "Leave first walkptr=%p\n", walkptr);
       return ((char *)walkptr)-loffset;
    }
-   Dmsg0(500, "Leave first walkptr=NULL\n");
+   Dmsg0(dbglvl, "Leave first walkptr=NULL\n");
    return NULL;
 }
 
index 1c60be7cf4cacb3fc5cd1766a5f0e3dfdb3a7774..599e5dea8454972b4405d226efb2e7771431709f 100644 (file)
@@ -58,7 +58,6 @@ Plugin *new_plugin()
 bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char *type)
 {
    bool found = false;
-//#ifndef HAVE_WIN32
    t_loadPlugin loadPlugin;
    Plugin *plugin;
    DIR* dp = NULL;
@@ -77,7 +76,7 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char
 
    if (!(dp = opendir(plugin_dir))) {
       berrno be;
-      Jmsg(NULL, M_ERROR, 0, _("Failed to open Plugin directory %s: ERR=%s\n"), 
+      Jmsg(NULL, M_ERROR_TERM, 0, _("Failed to open Plugin directory %s: ERR=%s\n"), 
             plugin_dir, be.bstrerror());
       goto get_out;
    }
@@ -90,7 +89,7 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char
    for ( ;; ) {
       if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) {
          if (!found) {
-            Jmsg(NULL, M_INFO, 0, _("Failed to find any plugins in %s\n"), 
+            Jmsg(NULL, M_WARNING, 0, _("Failed to find any plugins in %s\n"), 
                   plugin_dir);
          }
          break;
@@ -153,7 +152,6 @@ get_out:
    if (dp) {
       closedir(dp);
    }
-//#endif
    return found;
 }
 
@@ -162,7 +160,6 @@ get_out:
  */
 void unload_plugins()
 {
-//#ifndef HAVE_WIN32
    Plugin *plugin;
 
    if (!plugin_list) {
@@ -179,5 +176,4 @@ void unload_plugins()
    }
    delete plugin_list;
    plugin_list = NULL;
-//#endif
 }
index e1b3f659f8306e4e1cfcbe0fc9bfd1398c4a1c20..51c7c6318843021398290d24202d17780242faa5 100644 (file)
@@ -18,6 +18,11 @@ dbdriver
 remove reader/writer in FOPTS????
 
 General:
+25Sep08
+kes  Make first cut attempt to correct SQL that computes the current
+     Pool usage.  This is to fix bug #1159.
+kes  Do a bunch of plugin cleanups for Win32 and more careful checking
+     of PluginDirectory and whether or not a plugin was found.
 24Sep08
 kes  This code should fix the race condition that leads to a Director
      crash at job end time when the job list is updated. This was reported