- /* Look up start time of last job */
- jcr->jr.JobId = 0; /* flag for db_find_job_start time */
- if (!db_find_job_start_time(jcr, jcr->db, &jcr->jr, &jcr->stime)) {
- /* No job found, so upgrade this one to Full */
+ POOLMEM *stime = get_pool_memory(PM_MESSAGE);
+ /* Look up start time of last Full job */
+ now = 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->JobLevel == L_INCREMENTAL && have_full && jcr->job->MaxDiffInterval > 0) {
+ /* Lookup last diff job */
+ if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_DIFFERENTIAL)) {
+ diff_time = str_to_utime(stime);
+ do_diff = ((now - 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)) {
+ full_time = str_to_utime(stime);
+ do_full = ((now - full_time) <= jcr->job->MaxFullInterval);
+ }
+ free_pool_memory(stime);
+
+ if (!have_full || do_full) {
+ /* No recent Full job found, so upgrade this one to Full */