]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl use only ctime/mtime
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 27 Feb 2008 19:21:31 +0000 (19:21 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 27 Feb 2008 19:21:31 +0000 (19:21 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6499 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/patches/testing/project-accurate-backup-without-lstat.patch [new file with mode: 0644]

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 (file)
index 0000000..e8f76c9
--- /dev/null
@@ -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);
+       }