]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/fd_cmds.c
kes Implement bsr block level checking for disk files. However,
[bacula/bacula] / bacula / src / dird / fd_cmds.c
index 827f6a3378cfc90a7fdcc6aac6ccc24d9508c0f2..5badf778bf660770008d0533b7bbc00c9e552295 100644 (file)
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
@@ -164,9 +164,9 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
    bool have_full;
    bool do_full = false;
    bool do_diff = false;
-   time_t now;
-   utime_t full_time;
-   utime_t diff_time;
+   utime_t now;
+   utime_t last_full_time;
+   utime_t last_diff_time;
 
    since[0] = 0;
    /* If job cloned and a since time already given, use it */
@@ -184,26 +184,26 @@ 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->JobLevel) {
+   switch (jcr->get_JobLevel()) {
    case L_DIFFERENTIAL:
    case L_INCREMENTAL:
       POOLMEM *stime = get_pool_memory(PM_MESSAGE);
       /* Look up start time of last Full job */
-      now = time(NULL);
+      now = (utime_t)time(NULL);
       jcr->jr.JobId = 0;     /* flag to return since time */
       have_full = db_find_job_start_time(jcr, jcr->db, &jcr->jr, &jcr->stime);
       /* If there was a successful job, make sure it is recent enough */
-      if (jcr->JobLevel == L_INCREMENTAL && have_full && jcr->job->MaxDiffInterval > 0) {
+      if (jcr->get_JobLevel() == L_INCREMENTAL && have_full && jcr->job->MaxDiffInterval > 0) {
          /* Lookup last diff job */
          if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_DIFFERENTIAL)) {
-            diff_time = str_to_utime(stime);
-            do_diff = ((now - diff_time) <= jcr->job->MaxDiffInterval);
+            last_diff_time = str_to_utime(stime);
+            do_diff = ((now - last_diff_time) >= jcr->job->MaxDiffInterval);
          }
       }
       if (have_full && jcr->job->MaxFullInterval > 0 &&
          db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_FULL)) {
-         full_time = str_to_utime(stime);
-         do_full = ((now - full_time) <= jcr->job->MaxFullInterval);
+         last_full_time = str_to_utime(stime);
+         do_full = ((now - last_full_time) >= jcr->job->MaxFullInterval);
       }
       free_pool_memory(stime);
 
@@ -212,22 +212,22 @@ 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->JobLevel));
-         jcr->JobLevel = jcr->jr.JobLevel = L_FULL;
+            level_to_str(jcr->get_JobLevel()));
+         jcr->set_JobLevel(jcr->jr.JobLevel = L_FULL);
        } else if (do_diff) {
          /* No recent diff job found, so upgrade this one to Full */
          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->JobLevel));
-         jcr->JobLevel = jcr->jr.JobLevel = L_DIFFERENTIAL;
+            level_to_str(jcr->get_JobLevel()));
+         jcr->set_JobLevel(jcr->jr.JobLevel = L_DIFFERENTIAL);
       } else {
          if (jcr->job->rerun_failed_levels) {
             if (db_find_failed_job_since(jcr, jcr->db, &jcr->jr, jcr->stime, JobLevel)) {
                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->JobLevel));
-               jcr->JobLevel = jcr->jr.JobLevel = JobLevel;
+                  level_to_str(jcr->get_JobLevel()));
+               jcr->set_JobLevel(jcr->jr.JobLevel = JobLevel);
                jcr->jr.JobId = jcr->JobId;
                break;
             }
@@ -238,7 +238,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->JobLevel, jcr->stime);
+   Dmsg2(100, "Level=%c last start time=%s\n", jcr->get_JobLevel(), jcr->stime);
 }
 
 static void send_since_time(JCR *jcr)
@@ -261,12 +261,12 @@ static void send_since_time(JCR *jcr)
 bool send_level_command(JCR *jcr)
 {
    BSOCK   *fd = jcr->file_bsock;
-   const char *accurate=jcr->job->accurate?"accurate_":"";
-   const char *not_accurate="";
+   const char *accurate = jcr->job->accurate?"accurate_":"";
+   const char *not_accurate = "";
    /*
     * Send Level command to File daemon
     */
-   switch (jcr->JobLevel) {
+   switch (jcr->get_JobLevel()) {
    case L_BASE:
       fd->fsend(levelcmd, not_accurate, "base", " ", 0);
       break;
@@ -286,7 +286,7 @@ bool send_level_command(JCR *jcr)
    case L_SINCE:
    default:
       Jmsg2(jcr, M_FATAL, 0, _("Unimplemented backup level %d %c\n"),
-         jcr->JobLevel, jcr->JobLevel);
+         jcr->get_JobLevel(), jcr->get_JobLevel());
       return 0;
    }
    Dmsg1(120, ">filed: %s", fd->msg);
@@ -369,6 +369,9 @@ 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);
             }
@@ -585,7 +588,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->JobLevel) && cmd->target) {
+      if (cmd->can_run_at_level(jcr->get_JobLevel()) && cmd->target) {
          ehost = edit_job_codes(jcr, ehost, cmd->target, "");
          Dmsg2(200, "bdird: runscript %s -> %s\n", cmd->target, ehost);
 
@@ -669,7 +672,6 @@ int get_attributes_and_put_in_catalog(JCR *jcr)
       char *p, *fn;
       char Digest[MAXSTRING];      /* either Verify opts or MD5/SHA1 digest */
 
-      jcr->fname = check_pool_memory_size(jcr->fname, fd->msglen);
       if ((len = sscanf(fd->msg, "%ld %d %s", &file_index, &stream, Digest)) != 3) {
          Jmsg(jcr, M_FATAL, 0, _("<filed: bad attributes, expected 3 fields got %d\n"
 "msglen=%d msg=%s\n"), len, fd->msglen, fd->msg);
@@ -694,7 +696,7 @@ int get_attributes_and_put_in_catalog(JCR *jcr)
             }
          }
          /* Any cached attr is flushed so we can reuse jcr->attr and jcr->ar */
-         fn = jcr->fname;
+         fn = jcr->fname = check_pool_memory_size(jcr->fname, fd->msglen);
          while (*p != 0) {
             *fn++ = *p++;                /* copy filename */
          }