From: Eric Bollengier Date: Wed, 27 Feb 2008 19:21:31 +0000 (+0000) Subject: ebl use only ctime/mtime X-Git-Tag: Release-3.0.0~1790 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8666468147a6a88ad27d8fad3e1d4ca60796b092;p=bacula%2Fbacula ebl use only ctime/mtime git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6499 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/patches/testing/project-accurate-backup-without-lstat.patch b/bacula/patches/testing/project-accurate-backup-without-lstat.patch new file mode 100644 index 0000000000..e8f76c90cf --- /dev/null +++ b/bacula/patches/testing/project-accurate-backup-without-lstat.patch @@ -0,0 +1,168 @@ +Index: src/filed/backup.c +=================================================================== +--- src/filed/backup.c (revision 6497) ++++ src/filed/backup.c (working copy) +@@ -53,7 +53,8 @@ + typedef struct CurFile { + hlink link; + char *fname; +- char *lstat; ++ time_t ctime; ++ time_t mtime; + bool seen; + } CurFile; + +@@ -66,24 +67,13 @@ + * the last time. After we can compare Lstat field. + * + */ +-/* TODO: tweak verify code to use the same function ?? */ + bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt) + { + char *p; + int stat=false; +- struct stat statc; /* catalog stat */ +- char *Opts_Digest; + char *fname; + CurFile *elt; + +- int32_t LinkFIc; +- +- if (*ff_pkt->VerifyOpts) { /* use mtime + ctime checks by default */ +- Opts_Digest = ff_pkt->VerifyOpts; +- } else { +- Opts_Digest = "cm"; +- } +- + if (jcr->accurate == false || jcr->JobLevel == L_FULL) { + return true; + } +@@ -110,95 +100,14 @@ + goto bail_out; + } + +- decode_stat(elt->lstat, &statc, &LinkFIc); /* decode catalog stat */ +-// *do_Digest = CRYPTO_DIGEST_NONE; +- +- for (p=Opts_Digest; *p; p++) { +- char ed1[30], ed2[30]; +- switch (*p) { +- case 'i': /* compare INODEs */ +- if (statc.st_ino != ff_pkt->statp.st_ino) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_ino differ. Cat: %s File: %s\n"), fname, +- edit_uint64((uint64_t)statc.st_ino, ed1), +- edit_uint64((uint64_t)ff_pkt->statp.st_ino, ed2)); +- stat = true; +- } +- break; +- case 'p': /* permissions bits */ +- if (statc.st_mode != ff_pkt->statp.st_mode) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_mode differ. Cat: %x File: %x\n"), fname, +- (uint32_t)statc.st_mode, (uint32_t)ff_pkt->statp.st_mode); +- stat = true; +- } +- break; +-// case 'n': /* number of links */ +-// if (statc.st_nlink != ff_pkt->statp.st_nlink) { +-// Jmsg(jcr, M_SAVED, 0, _("%s st_nlink differ. Cat: %d File: %d\n"), fname, +-// (uint32_t)statc.st_nlink, (uint32_t)ff_pkt->statp.st_nlink); +-// stat = true; +-// } +-// break; +- case 'u': /* user id */ +- if (statc.st_uid != ff_pkt->statp.st_uid) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_uid differ. Cat: %u File: %u\n"), fname, +- (uint32_t)statc.st_uid, (uint32_t)ff_pkt->statp.st_uid); +- stat = true; +- } +- break; +- case 'g': /* group id */ +- if (statc.st_gid != ff_pkt->statp.st_gid) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_gid differ. Cat: %u File: %u\n"), fname, +- (uint32_t)statc.st_gid, (uint32_t)ff_pkt->statp.st_gid); +- stat = true; +- } +- break; +- case 's': /* size */ +- if (statc.st_size != ff_pkt->statp.st_size) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_size differ. Cat: %s File: %s\n"), fname, +- edit_uint64((uint64_t)statc.st_size, ed1), +- edit_uint64((uint64_t)ff_pkt->statp.st_size, ed2)); +- stat = true; +- } +- break; +-// case 'a': /* access time */ +-// if (statc.st_atime != ff_pkt->statp.st_atime) { +-// Jmsg(jcr, M_SAVED, 0, _("%s st_atime differs\n"), fname); +-// stat = true; +-// } +-// break; +- case 'm': +- if (statc.st_mtime != ff_pkt->statp.st_mtime) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_mtime differs\n"), fname); +- stat = true; +- } +- break; +- case 'c': /* ctime */ +- if (statc.st_ctime != ff_pkt->statp.st_ctime) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_ctime differs\n"), fname); +- stat = true; +- } +- break; +- case 'd': /* file size decrease */ +- if (statc.st_size > ff_pkt->statp.st_size) { +- Jmsg(jcr, M_SAVED, 0, _("%s st_size decrease. Cat: %s File: %s\n"), fname, +- edit_uint64((uint64_t)statc.st_size, ed1), +- edit_uint64((uint64_t)ff_pkt->statp.st_size, ed2)); +- stat = true; +- } +- break; +- case '5': /* compare MD5 */ +- Dmsg1(500, "set Do_MD5 for %s\n", ff_pkt->fname); +-// *do_Digest = CRYPTO_DIGEST_MD5; +- break; +- case '1': /* compare SHA1 */ +-// *do_Digest = CRYPTO_DIGEST_SHA1; +- break; +- case ':': +- case 'V': +- default: +- break; +- } ++ if (elt->st_mtime != ff_pkt->statp.st_mtime) { ++ Jmsg(jcr, M_SAVED, 0, _("%s st_mtime differs\n"), fname); ++ stat = true; ++ } else if (elt->st_ctime != ff_pkt->statp.st_ctime) { ++ Jmsg(jcr, M_SAVED, 0, _("%s st_ctime differs\n"), fname); ++ stat = true; + } ++ + accurate_mark_file_as_seen(elt); + Dmsg2(500, "accurate %s = %i\n", fname, stat); + +@@ -215,8 +124,11 @@ + { + BSOCK *dir = jcr->dir_bsock; + int len; ++ struct stat statp; ++ int32_t LinkFIc; + uint64_t nb; + CurFile *elt=NULL; ++ char *lstat; + + if (jcr->accurate==false || job_canceled(jcr) || jcr->JobLevel==L_FULL) { + return true; +@@ -246,8 +158,11 @@ + elt->fname = (char *) elt+sizeof(CurFile); + memcpy(elt->fname, dir->msg, dir->msglen); + elt->fname[dir->msglen]='\0'; +- elt->lstat = elt->fname + len + 1; +- elt->seen=0; ++ lstat = elt->fname + len + 1; ++ decode_stat(lstat, &statp, &LinkFIc); /* decode catalog stat */ ++ elt->st_ctime = statp.st_ctime; ++ elt->st_mtime = statp.st_mtime; ++ elt->seen = 0; + jcr->file_list->insert(elt->fname, elt); + Dmsg2(500, "add fname=%s lstat=%s\n", elt->fname, elt->lstat); + }