X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_run.c;h=0144c45bd79c22828d66e0824b68367434192285;hb=55a58f3a60e539e4e45753ffaeb772dd61fe7eb1;hp=6dadd3dfffe72aa4a3e7cbcbd74977f5db7bebec;hpb=d88ee65bc32791bd9079e4403fe8cba32b4e4a01;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_run.c b/bacula/src/dird/ua_run.c index 6dadd3dfff..0144c45bd7 100644 --- a/bacula/src/dird/ua_run.c +++ b/bacula/src/dird/ua_run.c @@ -51,13 +51,14 @@ int runcmd(UAContext *ua, char *cmd) char *job_name, *level_name, *jid, *store_name, *pool_name; char *where, *fileset_name, *client_name, *bootstrap, *replace; char *when; + int Priority = 0; int i, j, found, opt; JOB *job = NULL; STORE *store = NULL; CLIENT *client = NULL; FILESET *fileset = NULL; POOL *pool = NULL; - static char *kw[] = { + static char *kw[] = { /* command line arguments */ N_("job"), N_("jobid"), N_("client"), @@ -69,6 +70,8 @@ int runcmd(UAContext *ua, char *cmd) N_("bootstrap"), N_("replace"), N_("when"), + N_("priority"), + N_("yes"), /* 12 -- see below */ NULL}; if (!open_db(ua)) { @@ -92,7 +95,8 @@ int runcmd(UAContext *ua, char *cmd) Dmsg2(200, "Doing arg %d = %s\n", i, ua->argk[i]); for (j=0; !found && kw[j]; j++) { if (strcasecmp(ua->argk[i], _(kw[j])) == 0) { - if (!ua->argv[i]) { + /* Note, yes has no value, so do not err */ + if (!ua->argv[i] && j != 11 /*yes*/) { bsendmsg(ua, _("Value missing for keyword %s\n"), ua->argk[i]); return 1; } @@ -186,6 +190,20 @@ int runcmd(UAContext *ua, char *cmd) when = ua->argv[i]; found = True; break; + case 11: /* Priority */ + if (Priority) { + bsendmsg(ua, _("Priority specified twice.\n")); + return 1; + } + Priority = atoi(ua->argv[i]); + if (Priority <= 0) { + bsendmsg(ua, _("Priority must be positive nonzero setting it to 10.\n")); + Priority = 10; + } + break; + case 12: /* yes */ + found = True; + break; default: break; } @@ -326,6 +344,10 @@ int runcmd(UAContext *ua, char *cmd) jcr->replace = REPLACE_ALWAYS; } + if (Priority) { + jcr->JobPriority = Priority; + } + try_again: replace = ReplaceOptions[0].name; for (i=0; ReplaceOptions[i].name; i++) { @@ -343,13 +365,15 @@ JobName: %s\n\ FileSet: %s\n\ Client: %s\n\ Storage: %s\n\ -When: %s\n"), +When: %s\n\ +Priority: %d\n"), _("Admin"), job->hdr.name, jcr->fileset->hdr.name, NPRT(jcr->client->hdr.name), NPRT(jcr->store->hdr.name), - bstrutime(dt, sizeof(dt), jcr->sched_time)); + bstrutime(dt, sizeof(dt), jcr->sched_time), + jcr->JobPriority); jcr->JobLevel = L_FULL; break; case JT_BACKUP: @@ -378,7 +402,8 @@ Level: %s\n\ Client: %s\n\ Storage: %s\n\ Pool: %s\n\ -When: %s\n"), +When: %s\n\ +Priority: %d\n"), jcr->JobType==JT_BACKUP?_("Backup"):_("Verify"), job->hdr.name, jcr->fileset->hdr.name, @@ -386,7 +411,8 @@ When: %s\n"), jcr->client->hdr.name, jcr->store->hdr.name, NPRT(jcr->pool->hdr.name), - bstrutime(dt, sizeof(dt), jcr->sched_time)); + bstrutime(dt, sizeof(dt), jcr->sched_time), + jcr->JobPriority); break; case JT_RESTORE: if (jcr->RestoreJobId == 0 && !jcr->RestoreBootstrap) { @@ -411,7 +437,8 @@ Replace: %s\n\ FileSet: %s\n\ Client: %s\n\ Storage: %s\n\ -When: %s\n"), +When: %s\n\ +Priority: %d\n"), job->hdr.name, NPRT(jcr->RestoreBootstrap), jcr->where?jcr->where:NPRT(job->RestoreWhere), @@ -419,7 +446,8 @@ When: %s\n"), jcr->fileset->hdr.name, jcr->client->hdr.name, jcr->store->hdr.name, - bstrutime(dt, sizeof(dt), jcr->sched_time)); + bstrutime(dt, sizeof(dt), jcr->sched_time), + jcr->JobPriority); } else { bsendmsg(ua, _("Run Restore job\n\ JobName: %s\n\ @@ -430,7 +458,8 @@ FileSet: %s\n\ Client: %s\n\ Storage: %s\n\ JobId: %s\n\ -When: %s\n"), +When: %s\n\ +Priority: %d\n"), job->hdr.name, NPRT(jcr->RestoreBootstrap), jcr->where?jcr->where:NPRT(job->RestoreWhere), @@ -439,7 +468,8 @@ When: %s\n"), jcr->client->hdr.name, jcr->store->hdr.name, jcr->RestoreJobId==0?"*None*":edit_uint64(jcr->RestoreJobId, ec1), - bstrutime(dt, sizeof(dt), jcr->sched_time)); + bstrutime(dt, sizeof(dt), jcr->sched_time), + jcr->JobPriority); } break; default: @@ -478,14 +508,15 @@ When: %s\n"), add_prompt(ua, _("FileSet")); /* 3 */ add_prompt(ua, _("Client")); /* 4 */ add_prompt(ua, _("When")); /* 5 */ + add_prompt(ua, _("Priority")); /* 6 */ if (jcr->JobType == JT_BACKUP || jcr->JobType == JT_VERIFY) { - add_prompt(ua, _("Pool")); /* 6 */ + add_prompt(ua, _("Pool")); /* 7 */ } else if (jcr->JobType == JT_RESTORE) { - add_prompt(ua, _("Bootstrap")); /* 6 */ - add_prompt(ua, _("Where")); /* 7 */ - add_prompt(ua, _("Replace")); /* 8 */ - add_prompt(ua, _("JobId")); /* 9 */ + add_prompt(ua, _("Bootstrap")); /* 7 */ + add_prompt(ua, _("Where")); /* 8 */ + add_prompt(ua, _("Replace")); /* 9 */ + add_prompt(ua, _("JobId")); /* 10 */ } switch (do_prompt(ua, "", _("Select parameter to modify"), NULL, 0)) { case 0: @@ -579,7 +610,7 @@ When: %s\n"), break; case 5: /* When */ - if (!get_cmd(ua, _("Please enter scheduled start time (return for now): "))) { + if (!get_cmd(ua, _("Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): "))) { break; } if (ua->cmd[0] == 0) { @@ -593,6 +624,17 @@ When: %s\n"), } goto try_again; case 6: + /* Priority */ + if (!get_pint(ua, _("Enter new Priority: "))) { + break; + } + if (ua->pint32_val == 0) { + bsendmsg(ua, _("Priority must be a positive integer.\n")); + } else { + jcr->JobPriority = ua->pint32_val; + } + goto try_again; + case 7: if (jcr->JobType == JT_BACKUP || jcr->JobType == JT_VERIFY) { /* Pool */ pool = select_pool_resource(ua); @@ -624,7 +666,7 @@ When: %s\n"), } } goto try_again; - case 7: + case 8: /* Where */ if (!get_cmd(ua, _("Please enter path prefix for restore (/ for none): "))) { break; @@ -638,7 +680,7 @@ When: %s\n"), } jcr->where = bstrdup(ua->cmd); goto try_again; - case 8: + case 9: /* Replace */ start_prompt(ua, _("Replace:\n")); for (i=0; ReplaceOptions[i].name; i++) { @@ -649,7 +691,7 @@ When: %s\n"), jcr->replace = ReplaceOptions[opt].token; } goto try_again; - case 9: + case 10: /* JobId */ jid = NULL; /* force reprompt */ jcr->RestoreJobId = 0;