]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/accurate.c
Add debug code to MaxDiffInterval
[bacula/bacula] / bacula / src / filed / accurate.c
index e7fd6447208a9a58a75134e40eed993e0677d16c..d7ff0437573a5c3c59bc15a7035703566d5a22d3 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 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.
@@ -43,6 +43,22 @@ typedef struct PrivateCurFile {
    bool seen;
 } CurFile;
 
+bool accurate_mark_file_as_seen(JCR *jcr, char *fname)
+{
+   if (!jcr->accurate || !jcr->file_list) {
+      return false;
+   }
+   /* TODO: just use elt->seen = 1 */
+   CurFile *temp = (CurFile *)jcr->file_list->lookup(fname);
+   if (temp) {
+      temp->seen = 1;              /* records are in memory */
+      Dmsg1(dbglvl, "marked <%s> as seen\n", fname);
+   } else {
+      Dmsg1(dbglvl, "<%s> not found to be marked as seen\n", fname);
+   }
+   return true;
+}
+
 static bool accurate_mark_file_as_seen(JCR *jcr, CurFile *elt)
 {
    /* TODO: just use elt->seen = 1 */
@@ -98,14 +114,15 @@ bool accurate_send_deleted_list(JCR *jcr)
    ff_pkt->type = FT_DELETED;
 
    foreach_htable(elt, jcr->file_list) {
-      if (!elt->seen) { /* already seen */
-         Dmsg2(dbglvl, "deleted fname=%s seen=%i\n", elt->fname, elt->seen);
-         ff_pkt->fname = elt->fname;
-         ff_pkt->statp.st_mtime = elt->mtime;
-         ff_pkt->statp.st_ctime = elt->ctime;
-         encode_and_send_attributes(jcr, ff_pkt, stream);
+      if (elt->seen || plugin_check_file(jcr, elt->fname)) {
+         continue;
       }
-//      free(elt->fname);
+      Dmsg2(dbglvl, "deleted fname=%s seen=%i\n", elt->fname, elt->seen);
+      ff_pkt->fname = elt->fname;
+      ff_pkt->statp.st_mtime = elt->mtime;
+      ff_pkt->statp.st_ctime = elt->ctime;
+      encode_and_send_attributes(jcr, ff_pkt, stream);
+//    free(elt->fname);
    }
 
    term_find_files(ff_pkt);
@@ -177,12 +194,17 @@ bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt)
       goto bail_out;
    }
 
+   /*
+    * We check only mtime/ctime like with the normal
+    * incremental/differential mode
+    */
    if (elt.mtime != ff_pkt->statp.st_mtime) {
 //   Jmsg(jcr, M_SAVED, 0, _("%s      st_mtime differs\n"), fname);
       Dmsg3(dbglvl, "%s      st_mtime differs (%i!=%i)\n", 
             fname, elt.mtime, ff_pkt->statp.st_mtime);
      stat = true;
-   } else if (elt.ctime != ff_pkt->statp.st_ctime) {
+   } else if (!(ff_pkt->flags & FO_MTIMEONLY) 
+              && (elt.ctime != ff_pkt->statp.st_ctime)) {
 //   Jmsg(jcr, M_SAVED, 0, _("%s      st_ctime differs\n"), fname);
       Dmsg3(dbglvl, "%s      st_ctime differs\n", 
             fname, elt.ctime, ff_pkt->statp.st_ctime);