]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Since the user has been warned, allow console purge command
authorKern Sibbald <kern@sibbald.com>
Thu, 20 Nov 2008 12:22:06 +0000 (12:22 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 20 Nov 2008 12:22:06 +0000 (12:22 +0000)
     to purge volumes that are in use.
kes  Fix Win32 build to add new sd_plugins.c

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

bacula/src/dird/protos.h
bacula/src/dird/ua_purge.c
bacula/src/stored/sd_plugins.c
bacula/src/stored/sd_plugins.h
bacula/src/stored/stored.c
bacula/src/version.h
bacula/src/win32/stored/Makefile
bacula/technotes-2.5

index 123350f673b871e7e41cb282c35e8654d06e94d3..3509ed4a92234a453c538ddd2ebccd12a01a76fe 100644 (file)
@@ -286,10 +286,10 @@ int get_prune_list_for_volume(UAContext *ua, MEDIA_DBR *mr, del_ctx *del);
 int exclude_running_jobs_from_list(del_ctx *prune_list);
 
 /* ua_purge.c */
-bool is_volume_purged(UAContext *ua, MEDIA_DBR *mr);
+bool is_volume_purged(UAContext *ua, MEDIA_DBR *mr, bool force=false);
 bool mark_media_purged(UAContext *ua, MEDIA_DBR *mr);
-void purge_files_from_volume(UAContext *ua, MEDIA_DBR *mr );
-bool purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr);
+void purge_files_from_volume(UAContext *ua, MEDIA_DBR *mr);
+bool purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr, bool force=false);
 void purge_files_from_jobs(UAContext *ua, char *jobs);
 void purge_jobs_from_catalog(UAContext *ua, char *jobs);
 void purge_job_list_from_catalog(UAContext *ua, del_ctx &del);
index d34c07baaf0746aecd023e63d48bd3c5718c9852..9d2276801f29cdea2920a9d374c72439869af203 100644 (file)
@@ -132,7 +132,9 @@ int purgecmd(UAContext *ua, const char *cmd)
          return 1;
       case 1:                         /* Volume */
          if (select_media_dbr(ua, &mr)) {
-            purge_jobs_from_volume(ua, &mr);
+            purge_jobs_from_volume(ua, &mr, /*force*/true);
+            
+purge_jobs_from_volume(ua, &mr);
          }
          return 1;
       }
@@ -140,7 +142,7 @@ int purgecmd(UAContext *ua, const char *cmd)
    case 2:
       while ((i=find_arg(ua, NT_("volume"))) >= 0) {
          if (select_media_dbr(ua, &mr)) {
-            purge_jobs_from_volume(ua, &mr);
+            purge_jobs_from_volume(ua, &mr, /*force*/true);
          }
          *ua->argk[i] = 0;            /* zap keyword already seen */
          ua->send_msg("\n");
@@ -164,7 +166,7 @@ int purgecmd(UAContext *ua, const char *cmd)
       break;
    case 2:                            /* Volume */
       if (select_media_dbr(ua, &mr)) {
-         purge_jobs_from_volume(ua, &mr);
+         purge_jobs_from_volume(ua, &mr, /*force*/true);
       }
       break;
    }
@@ -389,7 +391,7 @@ void purge_files_from_volume(UAContext *ua, MEDIA_DBR *mr )
  * Returns: 1 if Volume purged
  *          0 if Volume not purged
  */
-bool purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr)
+bool purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr, bool force)
 {
    POOL_MEM query(PM_MESSAGE);
    struct del_ctx del;
@@ -440,7 +442,7 @@ bool purge_jobs_from_volume(UAContext *ua, MEDIA_DBR *mr)
    ua->info_msg(_("%d File%s on Volume \"%s\" purged from catalog.\n"), del.num_del,
       del.num_del==1?"":"s", mr->VolumeName);
 
-   purged = is_volume_purged(ua, mr);
+   purged = is_volume_purged(ua, mr, force); 
 
 bail_out:
    if (del.JobId) {
@@ -455,17 +457,24 @@ bail_out:
  *
  * Returns: true if volume purged
  *          false if not
+ *
+ * Note, we normally will not purge a volume that has Firstor LastWritten
+ *   zero, because it means the volume is most likely being written
+ *   however, if the user manually purges using the purge command in
+ *   the console, he has been warned, and we go ahead and purge
+ *   the volume anyway, if possible).
  */
-bool is_volume_purged(UAContext *ua, MEDIA_DBR *mr)
+bool is_volume_purged(UAContext *ua, MEDIA_DBR *mr, bool force)
 {
    POOL_MEM query(PM_MESSAGE);
    struct s_count_ctx cnt;
    bool purged = false;
    char ed1[50];
 
-   if (mr->FirstWritten == 0 || mr->LastWritten == 0) {
+   if (!force && (mr->FirstWritten == 0 || mr->LastWritten == 0)) {
       goto bail_out;               /* not written cannot purge */
    }
+
    if (strcmp(mr->VolStatus, "Purged") == 0) {
       purged = true;
       goto bail_out;
index ef0b8fde79c1ddcb89f123d7f49b66f01c88ee00..93be186474f784e7038c166f2699439607e62f6c 100644 (file)
@@ -110,7 +110,7 @@ static void dump_sd_plugin(Plugin *plugin, FILE *fp)
    fprintf(fp, "\tdescription=%s\n", NPRTB(info->plugin_description));
 }
 
-void load_dir_plugins(const char *plugin_dir)
+void load_sd_plugins(const char *plugin_dir)
 {
    if (!plugin_dir) {
       return;
@@ -247,7 +247,7 @@ int main(int argc, char *argv[])
    strcpy(my_name, "test-dir");
     
    getcwd(plugin_dir, sizeof(plugin_dir)-1);
-   load_dir_plugins(plugin_dir);
+   load_sd_plugins(plugin_dir);
 
    jcr1->JobId = 111;
    new_plugins(jcr1);
index 5974fc9ff3ef0491b3b6b86273b22e49cf0ceb87..f581d17e38369714001e4119e448dcb024904e4b 100644 (file)
@@ -130,7 +130,7 @@ typedef struct s_baculaFuncs {
 } bFuncs;
 
 /* Bacula Subroutines */
-void load_dir_plugins(const char *plugin_dir);
+void load_sd_plugins(const char *plugin_dir);
 void new_plugins(JCR *jcr);
 void free_plugins(JCR *jcr);
 void generate_plugin_event(JCR *jcr, bEventType event, void *value=NULL);
index a14f1431cd12bbe3ef86d5c93d6326c6d6438968..0d1c388b22ff3053564ec0db7493090fc0315e19 100644 (file)
@@ -259,7 +259,7 @@ int main (int argc, char *argv[])
    create_pid_file(me->pid_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs));
    read_state_file(me->working_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs));
 
-   load_dir_plugins(me->plugin_directory);
+   load_sd_plugins(me->plugin_directory);
 
    drop(uid, gid);
 
index 8714af4460df30e62e3c1c284152557921142bc2..d0707cf3302f5b369f61058011735e600e3e11dc 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.5.20"
-#define BDATE   "18 November 2008"
-#define LSMDATE "18Nov08"
+#define BDATE   "20 November 2008"
+#define LSMDATE "20Nov08"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2008"       /* year for copyright messages in progs */
index 52fb25b2f6dee7d8c5dfcbef3ece02430e2dec70..dfff5b978df5e623bfe32396e5ff5a0bd619b81e 100644 (file)
@@ -67,6 +67,7 @@ SD_OBJS = \
        $(OBJDIR)/mac.o \
        $(OBJDIR)/pythonsd.o \
        $(OBJDIR)/read.o \
+       $(OBJDIR)/sd_plugins.o \
        $(OBJDIR)/status.o
 
 # bextract
index 928c2b214be040cc7a90faab59b3b4ff86d5408f..9991d9cddfbd39491c67ca6b944f44054df99805 100644 (file)
@@ -11,6 +11,9 @@ mixed priorities
 
 General:
 20Nov08
+kes  Since the user has been warned, allow console purge command 
+     to purge volumes that are in use.
+kes  Fix Win32 build to add new sd_plugins.c
 ebl  Apply patch from bug #1175 that reset the Slot and the Inchanger
      flag in db_make_inchanger_unique().
 ebl  Remove a Emsg() after recieving a Fatal signal that can lock