]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Revert to #6988 for accurate mode (keep htable default)
authorEric Bollengier <eric@eb.homelinux.org>
Mon, 19 May 2008 17:54:29 +0000 (17:54 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 19 May 2008 17:54:29 +0000 (17:54 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6991 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/filed/Makefile.in
bacula/src/filed/accurate.c
bacula/src/filed/filed.h
bacula/src/jcr.h
bacula/src/lib/Makefile.in

index 6a402d7f247203874809be2fe0c40d88f55e998b..2e7304319c2086db86b75202ebe7e3b42d2fd6b7 100644 (file)
@@ -7,7 +7,6 @@
 @MCOMMON@
 
 srcdir =       .
-libdir =        ../lib
 VPATH =        .
 .PATH:         .
 
@@ -56,7 +55,7 @@ WIN32LIBS = $(@WIN32@)
 # inference rules
 .c.o:
        @echo "Compiling $<"
-       $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) -I$(libdir) $(CFLAGS) $<
+       $(NO_ECHO)$(CXX) $(DEFS) $(DEBUG) -c $(WCFLAGS) $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $<
 #-------------------------------------------------------------------------
 all: Makefile @WIN32@ bacula-fd @STATIC_FD@
        @echo "==== Make of filed is good ===="
@@ -79,15 +78,15 @@ win32:      $(WIN32OBJS)
        (cd win32; $(MAKE) DESTDIR=$(DESTDIR))
        @rm -f bacula-fd.exe
 
-bacula-fd:  $(SVROBJS) ../findlib/libfind.a ../lib/libbac.a ../lib/libtokyocabinet.a @WIN32@
+bacula-fd:  $(SVROBJS) ../findlib/libfind.a ../lib/libbac.a @WIN32@
        @echo "Linking $@ ..."
        $(CXX) $(WLDFLAGS) $(LDFLAGS) -L../lib -L../findlib -o $@ $(SVROBJS) \
-         $(WIN32LIBS) $(FDLIBS) -lfind -lbac -ltokyocabinet -lm $(PYTHON_LIBS) $(LIBS) \
+         $(WIN32LIBS) $(FDLIBS) -lfind -lbac -lm $(PYTHON_LIBS) $(LIBS) \
          $(DLIB) $(WRAPLIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS)
 
 static-bacula-fd:  $(SVROBJS) ../findlib/libfind.a ../lib/libbac.a @WIN32@
        $(CXX) $(WLDFLAGS) $(LDFLAGS) -static -L../lib -L../findlib -o $@ $(SVROBJS) \
-          $(WIN32LIBS) $(FDLIBS) -lfind -lbac -ltokyodbm -lm $(PYTHON_LIBS) $(LIBS) \
+          $(WIN32LIBS) $(FDLIBS) -lfind -lbac -lm $(PYTHON_LIBS) $(LIBS) \
           $(DLIB) $(WRAPLIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS)
        strip $@
 
@@ -153,7 +152,7 @@ depend:
        @$(MV) Makefile Makefile.bak
        @$(SED) "/^# DO NOT DELETE:/,$$ d" Makefile.bak > Makefile
        @$(ECHO) "# DO NOT DELETE: nice dependency list follows" >> Makefile
-       @$(CXX) -S -M $(CPPFLAGS) $(XINC) $(PYTHON_INC) -I$(srcdir) -I$(basedir) -I$(libdir) *.c >> Makefile
+       @$(CXX) -S -M $(CPPFLAGS) $(XINC) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(SQL_INC) *.c >> Makefile
        @if test -f Makefile ; then \
            $(RMF) Makefile.bak; \
        else \
index ba491bfcac7cf0387cfe8c5e29e5a2ee44358a02..e404d18f5e03c9190e3664d77db58e7caf1e2952 100644 (file)
 static int dbglvl=200;
 
 typedef struct PrivateCurFile {
+#ifndef USE_TCADB
+   hlink link;
+#endif
    char *fname;                        /* not stored with tchdb mode */
    time_t ctime;
    time_t mtime;
    bool seen;
 } CurFile;
 
+#ifdef USE_TCADB
 static void realfree(void *p); /* used by tokyo code */
 
 /*
@@ -186,6 +190,83 @@ bail_out:
    return true;
 }
 
+#else  /* HTABLE mode */
+
+static bool accurate_mark_file_as_seen(JCR *jcr, CurFile *elt)
+{
+   CurFile *temp = (CurFile *)jcr->file_list->lookup(elt->fname);
+   temp->seen = 1;             /* records are in memory */
+   return true;
+}
+
+static bool accurate_lookup(JCR *jcr, char *fname, CurFile *ret)
+{
+   bool found=false;
+   ret->seen = 0;
+
+   CurFile *temp = (CurFile *)jcr->file_list->lookup(fname);
+   if (temp) {
+      memcpy(ret, temp, sizeof(CurFile));
+      found=true;
+//    Dmsg1(dbglvl, "lookup <%s> ok\n", fname);
+   }
+
+   return found;
+}
+
+static bool accurate_init(JCR *jcr, int nbfile)
+{
+   CurFile *elt=NULL;
+   jcr->file_list = (htable *)malloc(sizeof(htable));
+   jcr->file_list->init(elt, &elt->link, nbfile);
+   return true;
+}
+
+/* This function is called at the end of backup
+ * We walk over all hash disk element, and we check
+ * for elt.seen.
+ */
+bool accurate_send_deleted_list(JCR *jcr)
+{
+   CurFile *elt;
+   FF_PKT *ff_pkt;
+   int stream = STREAM_UNIX_ATTRIBUTES;
+
+   if (!jcr->accurate || jcr->JobLevel == L_FULL) {
+      goto bail_out;
+   }
+
+   if (jcr->file_list == NULL) {
+      goto bail_out;
+   }
+
+   ff_pkt = init_find_files();
+   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);
+      }
+//      free(elt->fname);
+   }
+
+   term_find_files(ff_pkt);
+bail_out:
+   /* TODO: clean htable when this function is not reached ? */
+   if (jcr->file_list) {
+      jcr->file_list->destroy();
+      free(jcr->file_list);
+      jcr->file_list = NULL;
+   }
+   return true;
+}
+
+#endif /* common code */
+
 static bool accurate_add_file(JCR *jcr, char *fname, char *lstat)
 {
    bool ret = true;
@@ -197,6 +278,7 @@ static bool accurate_add_file(JCR *jcr, char *fname, char *lstat)
    elt.mtime = statp.st_mtime;
    elt.seen = 0;
 
+#ifdef USE_TCADB
    if (!tcadbput(jcr->file_list,
                 fname, strlen(fname)+1,
                 &elt, sizeof(CurFile)))
@@ -204,6 +286,15 @@ static bool accurate_add_file(JCR *jcr, char *fname, char *lstat)
       Jmsg(jcr, M_ERROR, 1, _("Can't update accurate hash disk ERR=%s\n"));
       ret = false;
    }
+#else  /* HTABLE */
+   CurFile *item;
+   /* we store CurFile, fname and ctime/mtime in the same chunk */
+   item = (CurFile *)jcr->file_list->hash_malloc(sizeof(CurFile)+strlen(fname)+1);
+   memcpy(item, &elt, sizeof(CurFile));
+   item->fname  = (char *)item+sizeof(CurFile);
+   strcpy(item->fname, fname);
+   jcr->file_list->insert(item->fname, item); 
+#endif
 
 // Dmsg2(dbglvl, "add fname=<%s> lstat=%s\n", fname, lstat);
    return ret;
@@ -308,6 +399,8 @@ int accurate_cmd(JCR *jcr)
    return true;
 }
 
+#ifdef USE_TCADB
+
 /*
  * Tokyo Cabinet library doesn't use smartalloc by default
  * results need to be released with real free()
@@ -318,3 +411,4 @@ void realfree(void *p)
    free(p);
 }
 
+#endif
index 9653dbaa0299525ad841495e23047bc22ed132a6..81a20fa0ca632999087ffc5a4de580c6420c7979 100644 (file)
 
 
 #define FILE_DAEMON 1
-#include "lib/tcadb.h"
+#ifdef USE_TCADB                     /* hash disk based */
+# include <tcadb.h>
+#else
+# include "lib/htable.h"
+#endif
 #include "filed_conf.h"
 #include "fd_plugins.h"
 #include "findlib/find.h"
index 40c79ece663309c21ec96be332b987c877575ec8..2ad419f19ac927d7e04d6bd1e60edb466bc412e4 100644 (file)
@@ -341,8 +341,12 @@ public:
    CRYPTO_CTX crypto;                 /* Crypto ctx */
    DIRRES* director;                  /* Director resource */
    bool VSS;                          /* VSS used by FD */
+#ifdef USE_TCADB
    TCADB *file_list;                 /* Previous file list (accurate mode) */
    POOLMEM *hash_name;
+#else
+   htable *file_list;                 /* Previous file list (accurate mode) */
+#endif
 #endif /* FILE_DAEMON */
 
 
index bb6c0b638cf6a0085ce8280cc549b49602600e14..3cf96fe0ffea6a10d9e57488a46d7c841798fa58 100644 (file)
@@ -69,7 +69,7 @@ libtokyocabinet.a:
        @(cd tokyocabinet ; echo "==>Entering directory `pwd`"; \
              $(MAKE) $@ || (echo ""; echo ""; echo "  ====== Error in `pwd` ======"; \
                            echo ""; echo "";));
-       @cp tokyocabinet/t*.h .
+       @cp tokyocabinet/tcadb.h tokyocabinet/tcbdb.h tokyocabinet/tchdb.h .
        @cp tokyocabinet/libtokyocabinet.a .
 
 libbac.a: $(LIBOBJS)