]> git.sur5r.net Git - bacula/bacula/commitdiff
Merge branch 'master' into basejobv3
authorEric Bollengier <eric@eb.homelinux.org>
Mon, 31 Aug 2009 12:33:51 +0000 (14:33 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 31 Aug 2009 12:33:51 +0000 (14:33 +0200)
Conflicts:
bacula/src/cats/protos.h
bacula/src/cats/sql_get.c
bacula/src/dird/backup.c

1  2 
bacula/src/baconfig.h
bacula/src/cats/cats.h
bacula/src/cats/protos.h
bacula/src/cats/sql.c
bacula/src/cats/sql_get.c
bacula/src/dird/backup.c
bacula/src/dird/job.c
bacula/src/dird/ua_output.c
bacula/src/dird/ua_restore.c

Simple merge
Simple merge
index efb4abc67a9b84b1c78aa136bc9132c54abfff2c,3c128e20a1a72ff5bfb98f26fac526843de57772..2b063f69c4f766cadf914981bfac97eb5af3e142
@@@ -109,10 -110,7 +110,8 @@@ int db_get_client_record(JCR *jcr, B_D
  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, DB_RESULT_HANDLER *result_handler, void *ctx);
- bool db_accurate_get_jobids(JCR *jcr, B_DB *mdb, JOB_DBR *jr, POOLMEM *jobids);
- int db_get_int_handler(void *ctx, int num_fields, char **row);
 +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);
  
  /* sql_list.c */
  enum e_list_type {
Simple merge
Simple merge
index 3fa560aa6af1694cfa22f1c576d50e751cf0a61f,80f11ab10883f47169014ee13992a8f5df822ba5..dd7d1fc59d7e2e7632332a2741f22bceac4e2854
@@@ -172,76 -131,39 +172,70 @@@ static int accurate_list_handler(void *
  bool send_accurate_current_files(JCR *jcr)
  {
     POOL_MEM buf;
 +   bool ret=true;
+    db_list_ctx jobids;
+    db_list_ctx nb;
  
 -   if (!jcr->accurate || job_canceled(jcr) || jcr->get_JobLevel()==L_FULL) {
 +   if (!jcr->accurate || job_canceled(jcr)) {
 +      return true;
 +   }
 +   /* In base level, no previous job is used */
 +   if (jcr->get_JobLevel() == L_BASE) {
        return true;
     }
 -   db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, &jobids);
  
-    POOLMEM *nb = get_pool_memory(PM_FNAME);
-    POOLMEM *jobids = get_pool_memory(PM_FNAME);
-    nb[0] = jobids[0] = '\0';
 -   if (jobids.count == 0) {
 -      Jmsg(jcr, M_FATAL, 0, _("Cannot find previous jobids.\n"));
 -      return false;
 +   if (jcr->get_JobLevel() == L_FULL) {
 +      /* On Full mode, if no previous base job, no accurate things */
 +      if (!get_base_jobids(jcr, jobids)) {
 +         goto bail_out;
 +      }
 +      jcr->HasBase = true;
 +      Jmsg(jcr, M_INFO, 0, _("Using BaseJobId(s): %s\n"), jobids);
 +
 +   } else {
 +      /* For Incr/Diff level, we search for older jobs */
 +      db_accurate_get_jobids(jcr, jcr->db, &jcr->jr, jobids);
 +
 +      /* We are in Incr/Diff, but no Full to build the accurate list... */
 +      if (*jobids == 0) {
 +         ret=false;
 +         Jmsg(jcr, M_FATAL, 0, _("Cannot find previous jobids.\n"));
 +         goto bail_out;
 +      }
     }
 +
     if (jcr->JobId) {            /* display the message only for real jobs */
        Jmsg(jcr, M_INFO, 0, _("Sending Accurate information.\n"));
     }
 +
     /* to be able to allocate the right size for htable */
-    Mmsg(buf, "SELECT sum(JobFiles) FROM Job WHERE JobId IN (%s)",jobids);
-    db_sql_query(jcr->db, buf.c_str(), db_get_int_handler, nb);
-    Dmsg2(0, "jobids=%s nb=%s\n", jobids, nb);
-    jcr->file_bsock->fsend("accurate files=%s\n", nb); 
+    Mmsg(buf, "SELECT sum(JobFiles) FROM Job WHERE JobId IN (%s)", jobids.list);
+    db_sql_query(jcr->db, buf.c_str(), db_list_handler, &nb);
+    Dmsg2(200, "jobids=%s nb=%s\n", jobids.list, nb.list);
+    jcr->file_bsock->fsend("accurate files=%s\n", nb.list); 
  
     if (!db_open_batch_connexion(jcr, jcr->db)) {
-       ret = false;
-       Jmsg0(jcr, M_FATAL, 0, "Can't get dedicate sql connexion");
-       goto bail_out;
+       Jmsg0(jcr, M_FATAL, 0, "Can't get batch sql connexion");
+       return false;
     }
 +   
 +   if (jcr->HasBase) {
 +      jcr->nb_base_files = str_to_int64(nb);
 +      db_create_base_file_list(jcr, jcr->db, jobids);
 +      db_get_base_file_list(jcr, jcr->db, 
 +                            accurate_list_handler, (void *)jcr);
  
 -   db_get_file_list(jcr, jcr->db_batch, jobids.list, accurate_list_handler, (void *)jcr);
 +   } else {
 +      db_get_file_list(jcr, jcr->db_batch, jobids, 
 +                       accurate_list_handler, (void *)jcr);
 +   } 
  
     /* TODO: close the batch connexion ? (can be used very soon) */
  
     jcr->file_bsock->signal(BNET_EOD);
  
 -   return true;
 +bail_out:
-    free_pool_memory(jobids);
-    free_pool_memory(nb);
 +   return ret;
  }
  
  /*
Simple merge
Simple merge
Simple merge