]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/fd_cmds.c
Adapt new prune code with old db_accurate_get_jobids()
[bacula/bacula] / bacula / src / dird / fd_cmds.c
index 71d9fc3b6158a912d5cfd07ae53cee1dcb9e91db..23b1da2593882f22301969a56ed258a8edb7ce1b 100644 (file)
@@ -122,6 +122,9 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time,
    /*
     * Now send JobId and authorization key
     */
+   if (jcr->sd_auth_key == NULL) {
+      jcr->sd_auth_key = bstrdup("dummy");
+   }
    fd->fsend(jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, jcr->VolSessionId,
              jcr->VolSessionTime, jcr->sd_auth_key);
    if (!jcr->keep_sd_auth_key && strcmp(jcr->sd_auth_key, "dummy")) {
@@ -190,7 +193,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
     * Lookup the last FULL backup job to get the time/date for a
     * differential or incremental save.
     */
-   switch (jcr->get_JobLevel()) {
+   switch (jcr->getJobLevel()) {
    case L_DIFFERENTIAL:
    case L_INCREMENTAL:
       POOLMEM *stime = get_pool_memory(PM_MESSAGE);
@@ -213,7 +216,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
       Dmsg4(50, "have_full=%d do_full=%d now=%lld full_time=%lld\n", have_full, 
             do_full, now, last_full_time);
       /* Make sure the last diff is recent enough */
-      if (have_full && jcr->get_JobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) {
+      if (have_full && jcr->getJobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) {
          /* Lookup last diff job */
          if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_DIFFERENTIAL)) {
             last_diff_time = str_to_utime(stime);
@@ -242,13 +245,13 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
          Jmsg(jcr, M_INFO, 0, "%s", db_strerror(jcr->db));
          Jmsg(jcr, M_INFO, 0, _("No prior or suitable Full backup found in catalog. Doing FULL backup.\n"));
          bsnprintf(since, since_len, _(" (upgraded from %s)"),
-            level_to_str(jcr->get_JobLevel()));
+            level_to_str(jcr->getJobLevel()));
          jcr->set_JobLevel(jcr->jr.JobLevel = L_FULL);
        } else if (do_diff) {
          /* No recent diff job found, so upgrade this one to Diff */
          Jmsg(jcr, M_INFO, 0, _("No prior or suitable Differential backup found in catalog. Doing Differential backup.\n"));
          bsnprintf(since, since_len, _(" (upgraded from %s)"),
-            level_to_str(jcr->get_JobLevel()));
+            level_to_str(jcr->getJobLevel()));
          jcr->set_JobLevel(jcr->jr.JobLevel = L_DIFFERENTIAL);
       } else {
          if (jcr->job->rerun_failed_levels) {
@@ -256,7 +259,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
                Jmsg(jcr, M_INFO, 0, _("Prior failed job found in catalog. Upgrading to %s.\n"),
                   level_to_str(JobLevel));
                bsnprintf(since, since_len, _(" (upgraded from %s)"),
-                  level_to_str(jcr->get_JobLevel()));
+                  level_to_str(jcr->getJobLevel()));
                jcr->set_JobLevel(jcr->jr.JobLevel = JobLevel);
                jcr->jr.JobId = jcr->JobId;
                break;
@@ -268,7 +271,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
       jcr->jr.JobId = jcr->JobId;
       break;
    }
-   Dmsg2(100, "Level=%c last start time=%s\n", jcr->get_JobLevel(), jcr->stime);
+   Dmsg2(100, "Level=%c last start time=%s\n", jcr->getJobLevel(), jcr->stime);
 }
 
 static void send_since_time(JCR *jcr)
@@ -296,7 +299,7 @@ bool send_level_command(JCR *jcr)
    /*
     * Send Level command to File daemon
     */
-   switch (jcr->get_JobLevel()) {
+   switch (jcr->getJobLevel()) {
    case L_BASE:
       fd->fsend(levelcmd, not_accurate, "base", " ", 0);
       break;
@@ -316,7 +319,7 @@ bool send_level_command(JCR *jcr)
    case L_SINCE:
    default:
       Jmsg2(jcr, M_FATAL, 0, _("Unimplemented backup level %d %c\n"),
-         jcr->get_JobLevel(), jcr->get_JobLevel());
+         jcr->getJobLevel(), jcr->getJobLevel());
       return 0;
    }
    Dmsg1(120, ">filed: %s", fd->msg);
@@ -333,6 +336,7 @@ static bool send_fileset(JCR *jcr)
 {
    FILESET *fileset = jcr->fileset;
    BSOCK   *fd = jcr->file_bsock;
+   STORE   *store = jcr->wstore;
    int num;
    bool include = true;
 
@@ -354,9 +358,11 @@ static bool send_fileset(JCR *jcr)
             ie = fileset->exclude_items[i];
             fd->fsend("E\n");
          }
+         if (ie->ignoredir) {
+            bnet_fsend(fd, "Z %s\n", ie->ignoredir);
+         }
          for (j=0; j<ie->num_opts; j++) {
             FOPTS *fo = ie->opts_list[j];
-            fd->fsend("O %s\n", fo->opts);
 
             bool enhanced_wild = false;
             for (k=0; fo->opts[k]!='\0'; k++) {
@@ -366,6 +372,34 @@ static bool send_fileset(JCR *jcr)
                }
             }
 
+            /* Strip out compression option Zn if disallowed for this Storage */
+            if (store && !store->AllowCompress) {
+               char newopts[MAX_FOPTS];
+               bool done=false;         /* print warning only if compression enabled in FS */ 
+               int j = 0;
+               for (k=0; fo->opts[k]!='\0'; k++) {                   
+                 /* Z compress option is followed by the single-digit compress level */
+                 if (fo->opts[k]=='Z') {
+                    done=true;
+                    k++;                /* skip option and level */
+                 } else {
+                    newopts[j] = fo->opts[k];
+                    j++;
+                 }
+               }
+               newopts[j] = '\0';
+
+               if (done) {
+                  Jmsg(jcr, M_INFO, 0,
+                      _("FD compression disabled for this Job because AllowCompress=No in Storage resource.\n") );
+               }
+               /* Send the new trimmed option set without overwriting fo->opts */
+               fd->fsend("O %s\n", newopts);
+            } else {
+               /* Send the original options */
+               fd->fsend("O %s\n", fo->opts);
+            }
+
             for (k=0; k<fo->regex.size(); k++) {
                fd->fsend("R %s\n", fo->regex.get(k));
             }
@@ -399,9 +433,6 @@ static bool send_fileset(JCR *jcr)
             if (fo->plugin) {
                fd->fsend("G %s\n", fo->plugin);
             }
-            if (fo->ignoredir) {
-               bnet_fsend(fd, "Z %s\n", fo->ignoredir);
-            }
             if (fo->reader) {
                fd->fsend("D %s\n", fo->reader);
             }
@@ -581,7 +612,7 @@ int send_runscripts_commands(JCR *jcr)
    Dmsg0(120, "bdird: sending runscripts to fd\n");
    
    foreach_alist(cmd, jcr->job->RunScripts) {
-      if (cmd->can_run_at_level(jcr->get_JobLevel()) && cmd->target) {
+      if (cmd->can_run_at_level(jcr->getJobLevel()) && cmd->target) {
          ehost = edit_job_codes(jcr, ehost, cmd->target, "");
          Dmsg2(200, "bdird: runscript %s -> %s\n", cmd->target, ehost);