X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffiled%2Faccurate.c;h=d7ff0437573a5c3c59bc15a7035703566d5a22d3;hb=edfffe456de676cc799719b684f883976d467f06;hp=e7fd6447208a9a58a75134e40eed993e0677d16c;hpb=fa93071721d8546d6e8599f906fbc3717516be45;p=bacula%2Fbacula diff --git a/bacula/src/filed/accurate.c b/bacula/src/filed/accurate.c index e7fd644720..d7ff043757 100644 --- a/bacula/src/filed/accurate.c +++ b/bacula/src/filed/accurate.c @@ -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);