]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/fd_cmds.c
Fix Win32 build -- turn off lockmgr and remove lockmgr defs
[bacula/bacula] / bacula / src / dird / fd_cmds.c
index 99b123b38fe6bfcb86873f46b3aedf64b02de3c5..7d3ca3225dfcf999b12b30a03caa96b3d9a0ed91 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -80,7 +80,7 @@ extern int FDConnectTimeout;
 int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time,
                            int verbose)
 {
-   BSOCK   *fd;
+   BSOCK   *fd = new_bsock();
    char ed1[30];
    utime_t heart_beat;
 
@@ -94,8 +94,14 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time,
       char name[MAX_NAME_LENGTH + 100];
       bstrncpy(name, _("Client: "), sizeof(name));
       bstrncat(name, jcr->client->name(), sizeof(name));
-      fd = bnet_connect(jcr, retry_interval, max_retry_time, heart_beat,
-           name, jcr->client->address, NULL, jcr->client->FDport, verbose);
+
+      fd->set_source_address(director->DIRsrc_addr);
+      if (!fd->connect(jcr,retry_interval,max_retry_time, heart_beat, name, jcr->client->address,
+           NULL, jcr->client->FDport, verbose)) {
+        fd->destroy();
+        fd = NULL;
+      }
+
       if (fd == NULL) {
          set_jcr_job_status(jcr, JS_ErrorTerminated);
          return 0;
@@ -164,7 +170,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
    bool have_full;
    bool do_full = false;
    bool do_diff = false;
-   time_t now;
+   utime_t now;
    utime_t last_full_time;
    utime_t last_diff_time;
 
@@ -189,25 +195,36 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
    case L_INCREMENTAL:
       POOLMEM *stime = get_pool_memory(PM_MESSAGE);
       /* Look up start time of last Full job */
-      now = time(NULL);
+      now = (utime_t)time(NULL);
       jcr->jr.JobId = 0;     /* flag to return since time */
       have_full = db_find_job_start_time(jcr, jcr->db, &jcr->jr, &jcr->stime);
-      /* If there was a successful job, make sure it is recent enough */
-      if (jcr->get_JobLevel() == L_INCREMENTAL && have_full && jcr->job->MaxDiffInterval > 0) {
+      if (have_full) {
+         last_full_time = str_to_utime(jcr->stime);
+      } else {
+         do_full = true;               /* No full, upgrade to one */
+      }
+      /* Make sure the last diff is recent enough */
+      if (have_full && jcr->get_JobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) {
          /* Lookup last diff job */
          if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_DIFFERENTIAL)) {
             last_diff_time = str_to_utime(stime);
-            do_diff = ((now - last_diff_time) >= jcr->job->MaxDiffInterval);
+            /* If no Diff since Full, use Full time */
+            if (last_diff_time < last_full_time) {
+               last_diff_time = last_full_time;
+            }
+         } else {
+            /* No last differential, so use last full time */
+            last_diff_time = last_full_time;
          }
+         do_diff = ((now - last_diff_time) >= jcr->job->MaxDiffInterval);
       }
-      if (have_full && jcr->job->MaxFullInterval > 0 &&
-         db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_FULL)) {
-         last_full_time = str_to_utime(stime);
+      /* Note, do_full takes precedence over do_diff */
+      if (have_full && jcr->job->MaxFullInterval > 0) {
          do_full = ((now - last_full_time) >= jcr->job->MaxFullInterval);
       }
       free_pool_memory(stime);
 
-      if (!have_full || do_full) {
+      if (do_full) {
          /* No recent Full job found, so upgrade this one to Full */
          Jmsg(jcr, M_INFO, 0, "%s", db_strerror(jcr->db));
          Jmsg(jcr, M_INFO, 0, _("No prior or suitable Full backup found in catalog. Doing FULL backup.\n"));
@@ -215,7 +232,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
             level_to_str(jcr->get_JobLevel()));
          jcr->set_JobLevel(jcr->jr.JobLevel = L_FULL);
        } else if (do_diff) {
-         /* No recent diff job found, so upgrade this one to Full */
+         /* No recent diff job found, so upgrade this one to Diff */
          Jmsg(jcr, M_INFO, 0, _("No prior or suitable Differential backup found in catalog. Doing Differential backup.\n"));
          bsnprintf(since, since_len, _(" (upgraded from %s)"),
             level_to_str(jcr->get_JobLevel()));