From 3212f52a0c87e211a15373e0afacc9e4cf001216 Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Wed, 4 Jan 2012 12:07:14 +0100 Subject: [PATCH] Add Accurate and MaxRunSchedTime in Schedule resource --- bacula/src/dird/dird_conf.h | 6 +++++- bacula/src/dird/run_conf.c | 27 +++++++++++++++++++++++++-- bacula/src/dird/scheduler.c | 7 ++++++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/bacula/src/dird/dird_conf.h b/bacula/src/dird/dird_conf.h index 272516f18e..0a9d26cafb 100644 --- a/bacula/src/dird/dird_conf.h +++ b/bacula/src/dird/dird_conf.h @@ -319,7 +319,7 @@ public: inline char *STORE::dev_name() const { DEVICE *dev = (DEVICE *)device->first(); - return dev->hdr.name; + return dev->name(); } inline char *STORE::name() const { return hdr.name; } @@ -613,8 +613,12 @@ public: uint32_t level; /* level override */ int32_t Priority; /* priority override */ uint32_t job_type; + utime_t MaxRunSchedTime; /* max run time in sec from Sched time */ + bool MaxRunSchedTime_set; /* MaxRunSchedTime given */ bool spool_data; /* Data spooling override */ bool spool_data_set; /* Data spooling override given */ + bool accurate; /* accurate */ + bool accurate_set; /* accurate given */ bool write_part_after_job; /* Write part after job override */ bool write_part_after_job_set; /* Write part after job override given */ diff --git a/bacula/src/dird/run_conf.c b/bacula/src/dird/run_conf.c index 23b8732cec..69f80d3c34 100644 --- a/bacula/src/dird/run_conf.c +++ b/bacula/src/dird/run_conf.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2011 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. @@ -32,7 +32,6 @@ * * Kern Sibbald, May MM * - * Version $Id$ */ #include "bacula.h" @@ -163,6 +162,8 @@ static struct s_kw RunFields[] = { {"priority", 'p'}, {"spooldata", 's'}, {"writepartafterjob", 'W'}, + {"maxrunschedtime", 'm'}, + {"accurate", 'a'}, {NULL, 0} }; @@ -183,6 +184,7 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) { int i, j; bool found; + utime_t utime; int token, state, state2 = 0, code = 0, code2 = 0; int options = lc->options; RUN **run = (RUN **)(item->value); @@ -304,6 +306,27 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) lrun.msgs = (MSGS *)res; } break; + case 'm': /* max run sched time */ + token = lex_get_token(lc, T_QUOTED_STRING); + if (!duration_to_utime(lc->str, &utime)) { + scan_err1(lc, _("expected a time period, got: %s"), lc->str); + return; + } + lrun.MaxRunSchedTime = utime; + lrun.MaxRunSchedTime_set = true; + break; + case 'a': /* accurate */ + token = lex_get_token(lc, T_NAME); + if (strcasecmp(lc->str, "yes") == 0 || strcasecmp(lc->str, "true") == 0) { + lrun.accurate = true; + lrun.accurate_set = true; + } else if (strcasecmp(lc->str, "no") == 0 || strcasecmp(lc->str, "false") == 0) { + lrun.accurate = false; + lrun.accurate_set = true; + } else { + scan_err1(lc, _("Expect a YES or NO, got: %s"), lc->str); + } + break; default: scan_err1(lc, _("Expected a keyword name, got: %s"), lc->str); /* NOT REACHED */ diff --git a/bacula/src/dird/scheduler.c b/bacula/src/dird/scheduler.c index a4b32ce126..154cc8d05c 100644 --- a/bacula/src/dird/scheduler.c +++ b/bacula/src/dird/scheduler.c @@ -232,9 +232,15 @@ again: if (run->spool_data_set) { jcr->spool_data = run->spool_data; } + if (run->accurate_set) { /* overwrite accurate mode */ + jcr->accurate = run->accurate; + } if (run->write_part_after_job_set) { jcr->write_part_after_job = run->write_part_after_job; } + if (run->MaxRunSchedTime_set) { + jcr->MaxRunSchedTime = run->MaxRunSchedTime; + } Dmsg0(dbglvl, "Leave wait_for_next_job()\n"); return jcr; } @@ -266,7 +272,6 @@ static void find_runs() Dmsg0(dbglvl, "enter find_runs()\n"); - /* compute values for time now */ now = time(NULL); (void)localtime_r(&now, &tm); -- 2.39.5