]> git.sur5r.net Git - bacula/bacula/commitdiff
Add delta option to db_get_file_list()
authorEric Bollengier <eric@eb.homelinux.org>
Sun, 21 Nov 2010 09:43:54 +0000 (10:43 +0100)
committerEric Bollengier <eric@eb.homelinux.org>
Thu, 25 Nov 2010 13:59:31 +0000 (14:59 +0100)
bacula/src/cats/protos.h
bacula/src/cats/sql_get.c
bacula/src/dird/backup.c
bacula/src/dird/ua_restore.c
bacula/src/dird/vbackup.c
bacula/src/tools/bbatch.c

index 2a0f3376dd0f4c25ad8f9c69af0c16ee7691cecc..2e0b71a06e1f8c6933635c2d05e648e06171ee69 100644 (file)
@@ -123,10 +123,9 @@ int db_get_job_volume_parameters(JCR *jcr, B_DB *mdb, JobId_t JobId, VOL_PARAMS
 int db_get_client_record(JCR *jcr, B_DB *mdb, CLIENT_DBR *cdbr);
 int db_get_counter_record(JCR *jcr, B_DB *mdb, COUNTER_DBR *cr);
 bool db_get_query_dbids(JCR *jcr, B_DB *mdb, POOL_MEM &query, dbid_list &ids);
-bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids, bool use_md5, DB_RESULT_HANDLER *result_handler, void *ctx);
-bool db_get_file_list_with_delta(JCR *jcr, B_DB *mdb,
-                                 char *jobids, bool use_md5,
-                                 DB_RESULT_HANDLER *result_handler, void *ctx);
+bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids,
+                      bool use_md5, bool use_delta,
+                      DB_RESULT_HANDLER *result_handler, void *ctx);
 bool db_get_base_jobid(JCR *jcr, B_DB *mdb, JOB_DBR *jr, JobId_t *jobid);
 bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, JOB_DBR *jr, db_list_ctx *jobids);
 bool db_get_used_base_jobids(JCR *jcr, B_DB *mdb, POOLMEM *jobids, db_list_ctx *result);
index e38e5dde04e2a6e1bceb946e756db11f069e2975..e4ebfbaca4ab2332fb3c92a7b734f68057f088c0 100644 (file)
@@ -1084,7 +1084,7 @@ bool db_get_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
 }
 
 /* Remove all MD5 from a query (can save lot of memory with many files) */
-static void replace_md5(char *q)
+static void strip_md5(char *q)
 {
    char *p = q;
    while ((p = strstr(p, ", MD5"))) {
@@ -1103,7 +1103,8 @@ static void replace_md5(char *q)
  *
  * TODO: See if we can do the SORT only if needed (as an argument)
  */
-bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids, bool use_md5,
+bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids,
+                      bool use_md5, bool use_delta,
                       DB_RESULT_HANDLER *result_handler, void *ctx)
 {
    if (!*jobids) {
@@ -1113,55 +1114,15 @@ bool db_get_file_list(JCR *jcr, B_DB *mdb, char *jobids, bool use_md5,
       return false;
    }
    POOL_MEM buf(PM_MESSAGE);
-         
-#define new_db_get_file_list
-#ifdef new_db_get_file_list
    POOL_MEM buf2(PM_MESSAGE);
-   Mmsg(buf2, select_recent_version_with_basejob[db_type], 
-        jobids, jobids, jobids, jobids);
-
-   /* bsr code is optimized for JobId sorted, with Delta, we need to get
-    * them ordered by date. JobTDate and JobId can be mixed if using Copy
-    * or Migration
-    */
-   Mmsg(buf,
-"SELECT Path.Path, Filename.Name, T1.FileIndex, T1.JobId, LStat, MarkId, MD5 "
- "FROM ( %s ) AS T1 "
- "JOIN Filename ON (Filename.FilenameId = T1.FilenameId) "
- "JOIN Path ON (Path.PathId = T1.PathId) "
-"WHERE FileIndex > 0 "
-"ORDER BY T1.JobTDate, FileIndex ASC",/* Return sorted by JobTDate */
-                                      /* FileIndex for restore code */ 
-        buf2.c_str());
-   if (!use_md5) {
-      replace_md5(buf.c_str());
-   }
-   Dmsg1(100, "q=%s\n", buf.c_str());
-#else
-   /*  
-    * I am not sure that this works the same as the code in ua_restore.c but it
-    *  is very similar. The accurate-test fails in a restore. Bad file count.
-    */
-   Mmsg(buf, uar_sel_files, jobids);
-#endif
-
-   return db_sql_query(mdb, buf.c_str(), result_handler, ctx);
-}
+   if (use_delta) {
+      Mmsg(buf2, select_recent_version_with_basejob_and_delta[db_type], 
+           jobids, jobids, jobids, jobids);
 
-bool db_get_file_list_with_delta(JCR *jcr, B_DB *mdb,
-                                 char *jobids, bool use_md5,
-                                 DB_RESULT_HANDLER *result_handler, void *ctx)
-{
-   if (!*jobids) {
-      db_lock(mdb);
-      Mmsg(mdb->errmsg, _("ERR=JobIds are empty\n"));
-      db_unlock(mdb);
-      return false;
+   } else {
+      Mmsg(buf2, select_recent_version_with_basejob[db_type], 
+           jobids, jobids, jobids, jobids);
    }
-   POOL_MEM buf(PM_MESSAGE);         
-   POOL_MEM buf2(PM_MESSAGE);
-   Mmsg(buf2, select_recent_version_with_basejob_and_delta[db_type], 
-        jobids, jobids, jobids, jobids);
 
    /* bsr code is optimized for JobId sorted, with Delta, we need to get
     * them ordered by date. JobTDate and JobId can be mixed if using Copy
@@ -1176,9 +1137,11 @@ bool db_get_file_list_with_delta(JCR *jcr, B_DB *mdb,
 "ORDER BY T1.JobTDate, FileIndex ASC",/* Return sorted by JobTDate */
                                       /* FileIndex for restore code */ 
         buf2.c_str());
+
    if (!use_md5) {
-      replace_md5(buf.c_str());
+      strip_md5(buf.c_str());
    }
+
    Dmsg1(100, "q=%s\n", buf.c_str());
 
    return db_sql_query(mdb, buf.c_str(), result_handler, ctx);
@@ -1302,7 +1265,7 @@ bool db_get_base_file_list(JCR *jcr, B_DB *mdb, bool use_md5,
         (uint64_t) jcr->JobId);
    
    if (!use_md5) {
-      replace_md5(buf.c_str());
+      strip_md5(buf.c_str());
    }
    return db_sql_query(mdb, buf.c_str(), result_handler, ctx);
 }
index 7bd06a9eff34e863394aa953a032bff4a1b16137..668d5c55caac201ab47b2338e550f6290b25e735 100644 (file)
@@ -297,7 +297,7 @@ bool send_accurate_current_files(JCR *jcr)
 
    } else {
       db_get_file_list(jcr, jcr->db_batch,
-                       jobids.list, jcr->use_accurate_chksum,
+                       jobids.list, jcr->use_accurate_chksum, false /* no delta */,
                        accurate_list_handler, (void *)jcr);
    } 
 
index 8377c22a4311121c9f9edb8e11c555da801a1102..73df8ca22ab6b6b446fcffc9360a9639394ab1b7 100644 (file)
@@ -1117,9 +1117,10 @@ static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx)
 
 #define new_get_file_list
 #ifdef new_get_file_list
-   if (!db_get_file_list_with_delta(ua->jcr, ua->db, 
-                                    rx->JobIds, false /* do not use md5 */, 
-                                    insert_tree_handler, (void *)&tree))
+   if (!db_get_file_list(ua->jcr, ua->db, 
+                         rx->JobIds, false /* do not use md5 */, 
+                         true /* get delta */,
+                         insert_tree_handler, (void *)&tree))
    {
       ua->error_msg("%s", db_strerror(ua->db));
    }
index 0edec869769510c739af71845635737227d49727..c579f9989f0cec8ab0a3a7464c8fc66cf8c62732 100644 (file)
@@ -484,6 +484,7 @@ static bool create_bootstrap_file(JCR *jcr, char *jobids)
    }
 
    if (!db_get_file_list(jcr, jcr->db_batch, jobids, false /* don't use md5 */,
+                         true /* use delta */,
                          insert_bootstrap_handler, (void *)rx.bsr))
    {
       Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db_batch));
index ef877013ec7ffa22b582e9284ef9591dfeb3f60e..789983486818b9e70243f7e287fc32edfa0c0f4d 100644 (file)
@@ -196,7 +196,7 @@ int main (int argc, char *argv[])
       }
 
       start = get_current_btime();
-      db_get_file_list(NULL, db, restore_list, false, list_handler, &nb_file);
+      db_get_file_list(NULL, db, restore_list, false, false, list_handler, &nb_file);
       end = get_current_btime();
 
       Pmsg3(0, _("Computing file list for jobid=%s files=%lld secs=%d\n"),