X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_run.c;h=b57b3c402e5f7609f4faa241b42402ffe49b4ee8;hb=928fa1c1a90e32611cdceecc19672945757af154;hp=c2ac7e981d3482e6b299bad3829fe61434b40857;hpb=217e5ed47147cd420ed0799a96868a561bfd6b57;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_run.c b/bacula/src/dird/ua_run.c index c2ac7e981d..b57b3c402e 100644 --- a/bacula/src/dird/ua_run.c +++ b/bacula/src/dird/ua_run.c @@ -60,6 +60,8 @@ public: int files; bool cloned; bool mod; + int spool_data; + bool spool_data_set; /* Methods */ run_ctx() { memset(this, 0, sizeof(run_ctx)); @@ -174,6 +176,7 @@ try_again: start_job: Dmsg3(100, "JobId=%u using pool %s priority=%d\n", (int)jcr->JobId, jcr->pool->name(), jcr->JobPriority); + Dmsg1(900, "Running a job; its spool_data = %d\n", jcr->spool_data); JobId = run_job(jcr); Dmsg4(100, "JobId=%u NewJobId=%d using pool %s priority=%d\n", (int)jcr->JobId, JobId, jcr->pool->name(), jcr->JobPriority); @@ -207,29 +210,29 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) add_prompt(ua, _("Storage")); /* 1 */ add_prompt(ua, _("Job")); /* 2 */ add_prompt(ua, _("FileSet")); /* 3 */ - if (jcr->JobType == JT_RESTORE) { + if (jcr->get_JobType() == JT_RESTORE) { add_prompt(ua, _("Restore Client")); /* 4 */ } else { add_prompt(ua, _("Client")); /* 4 */ } add_prompt(ua, _("When")); /* 5 */ add_prompt(ua, _("Priority")); /* 6 */ - if (jcr->JobType == JT_BACKUP || - jcr->JobType == JT_COPY || - jcr->JobType == JT_MIGRATE || - jcr->JobType == JT_VERIFY) { + if (jcr->get_JobType() == JT_BACKUP || + jcr->get_JobType() == JT_COPY || + jcr->get_JobType() == JT_MIGRATE || + jcr->get_JobType() == JT_VERIFY) { add_prompt(ua, _("Pool")); /* 7 */ - if (jcr->JobType == JT_VERIFY) { + if (jcr->get_JobType() == JT_VERIFY) { add_prompt(ua, _("Verify Job")); /* 8 */ } - } else if (jcr->JobType == JT_RESTORE) { + } else if (jcr->get_JobType() == JT_RESTORE) { add_prompt(ua, _("Bootstrap")); /* 7 */ add_prompt(ua, _("Where")); /* 8 */ add_prompt(ua, _("File Relocation"));/* 9 */ add_prompt(ua, _("Replace")); /* 10 */ add_prompt(ua, _("JobId")); /* 11 */ } - if (jcr->JobType == JT_BACKUP || jcr->JobType == JT_RESTORE) { + if (jcr->get_JobType() == JT_BACKUP || jcr->get_JobType() == JT_RESTORE) { add_prompt(ua, _("Plugin Options")); /* 12 */ } switch (do_prompt(ua, "", _("Select parameter to modify"), NULL, 0)) { @@ -299,10 +302,10 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) goto try_again; case 7: /* Pool or Bootstrap depending on JobType */ - if (jcr->JobType == JT_BACKUP || - jcr->JobType == JT_COPY || - jcr->JobType == JT_MIGRATE || - jcr->JobType == JT_VERIFY) { /* Pool */ + if (jcr->get_JobType() == JT_BACKUP || + jcr->get_JobType() == JT_COPY || + jcr->get_JobType() == JT_MIGRATE || + jcr->get_JobType() == JT_VERIFY) { /* Pool */ rc.pool = select_pool_resource(ua); if (rc.pool) { jcr->pool = rc.pool; @@ -336,7 +339,7 @@ int modify_job_parameters(UAContext *ua, JCR *jcr, run_ctx &rc) goto try_again; case 8: /* Verify Job */ - if (jcr->JobType == JT_VERIFY) { + if (jcr->get_JobType() == JT_VERIFY) { rc.verify_job = select_job_resource(ua); if (rc.verify_job) { jcr->verify_job = rc.verify_job; @@ -515,7 +518,8 @@ static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc) /* If pool changed, update migration write storage */ - if (jcr->JobType == JT_MIGRATE || jcr->JobType == JT_COPY) { + if (jcr->get_JobType() == JT_MIGRATE || jcr->get_JobType() == JT_COPY || + (jcr->get_JobType() == JT_BACKUP && jcr->get_JobLevel() == L_VIRTUAL_FULL)) { if (!set_migration_wstorage(jcr, rc.pool)) { return false; } @@ -528,7 +532,7 @@ static bool reset_restore_context(UAContext *ua, JCR *jcr, run_ctx &rc) } if (rc.level_name) { if (!get_level_from_name(jcr, rc.level_name)) { - ua->send_msg(_("Level %s not valid.\n"), rc.level_name); + ua->send_msg(_("Level \"%s\" not valid.\n"), rc.level_name); return false; } rc.level_name = NULL; @@ -676,33 +680,37 @@ bail_out_reg: static void select_job_level(UAContext *ua, JCR *jcr) { - if (jcr->JobType == JT_BACKUP) { + if (jcr->get_JobType() == JT_BACKUP) { start_prompt(ua, _("Levels:\n")); - add_prompt(ua, _("Base")); +// add_prompt(ua, _("Base")); add_prompt(ua, _("Full")); add_prompt(ua, _("Incremental")); add_prompt(ua, _("Differential")); add_prompt(ua, _("Since")); + add_prompt(ua, _("VirtualFull")); switch (do_prompt(ua, "", _("Select level"), NULL, 0)) { +// case 0: +// jcr->JobLevel = L_BASE; +// break; case 0: - jcr->JobLevel = L_BASE; + jcr->set_JobLevel(L_FULL); break; case 1: - jcr->JobLevel = L_FULL; + jcr->set_JobLevel(L_INCREMENTAL); break; case 2: - jcr->JobLevel = L_INCREMENTAL; + jcr->set_JobLevel(L_DIFFERENTIAL); break; case 3: - jcr->JobLevel = L_DIFFERENTIAL; + jcr->set_JobLevel(L_SINCE); break; case 4: - jcr->JobLevel = L_SINCE; + jcr->set_JobLevel(L_VIRTUAL_FULL); break; default: break; } - } else if (jcr->JobType == JT_VERIFY) { + } else if (jcr->get_JobType() == JT_VERIFY) { start_prompt(ua, _("Levels:\n")); add_prompt(ua, _("Initialize Catalog")); add_prompt(ua, _("Verify Catalog")); @@ -711,19 +719,19 @@ static void select_job_level(UAContext *ua, JCR *jcr) add_prompt(ua, _("Verify Volume Data (not yet implemented)")); switch (do_prompt(ua, "", _("Select level"), NULL, 0)) { case 0: - jcr->JobLevel = L_VERIFY_INIT; + jcr->set_JobLevel(L_VERIFY_INIT); break; case 1: - jcr->JobLevel = L_VERIFY_CATALOG; + jcr->set_JobLevel(L_VERIFY_CATALOG); break; case 2: - jcr->JobLevel = L_VERIFY_VOLUME_TO_CATALOG; + jcr->set_JobLevel(L_VERIFY_VOLUME_TO_CATALOG); break; case 3: - jcr->JobLevel = L_VERIFY_DISK_TO_CATALOG; + jcr->set_JobLevel(L_VERIFY_DISK_TO_CATALOG); break; case 4: - jcr->JobLevel = L_VERIFY_DATA; + jcr->set_JobLevel(L_VERIFY_DATA); break; default: break; @@ -737,8 +745,8 @@ static void select_job_level(UAContext *ua, JCR *jcr) static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char *verify_list, char *jid, const char *replace, char *client_name) { - Dmsg1(800, "JobType=%c\n", jcr->JobType); - switch (jcr->JobType) { + Dmsg1(800, "JobType=%c\n", jcr->get_JobType()); + switch (jcr->get_JobType()) { char ec1[30]; char dt[MAX_TIME_LENGTH]; case JT_ADMIN: @@ -757,11 +765,11 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->wstore?jcr->wstore->name():"*None*", bstrutime(dt, sizeof(dt), jcr->sched_time), jcr->JobPriority); - jcr->JobLevel = L_FULL; + jcr->set_JobLevel(L_FULL); break; case JT_BACKUP: case JT_VERIFY: - if (jcr->JobType == JT_BACKUP) { + if (jcr->get_JobType() == JT_BACKUP) { if (ua->api) ua->signal(BNET_RUN_CMD); ua->send_msg(_("Run %s job\n" "JobName: %s\n" @@ -775,7 +783,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "%s%s%s"), _("Backup"), job->name(), - level_to_str(jcr->JobLevel), + level_to_str(jcr->get_JobLevel()), jcr->client->name(), jcr->fileset->name(), NPRT(jcr->pool->name()), jcr->pool_source, @@ -812,7 +820,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char "Priority: %d\n"), _("Verify"), job->name(), - level_to_str(jcr->JobLevel), + level_to_str(jcr->get_JobLevel()), jcr->client->name(), jcr->fileset->name(), NPRT(jcr->pool->name()), jcr->pool_source, @@ -834,7 +842,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->RestoreJobId = ua->int64_val; } } - jcr->JobLevel = L_FULL; /* default level */ + jcr->set_JobLevel(L_FULL); /* default level */ Dmsg1(800, "JobId to restore=%d\n", jcr->RestoreJobId); if (jcr->RestoreJobId == 0) { if (ua->api) ua->signal(BNET_RUN_CMD); @@ -932,12 +940,12 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char case JT_COPY: case JT_MIGRATE: char *prt_type; - if (jcr->JobType == JT_COPY) { + if (jcr->get_JobType() == JT_COPY) { prt_type = _("Run Copy job\n"); } else { prt_type = _("Run Migration job\n"); } - jcr->JobLevel = L_FULL; /* default level */ + jcr->set_JobLevel(L_FULL); /* default level */ if (ua->api) ua->signal(BNET_RUN_CMD); ua->send_msg("%s" "JobName: %s\n" @@ -965,7 +973,7 @@ static bool display_job_parameters(UAContext *ua, JCR *jcr, JOB *job, const char jcr->JobPriority); break; default: - ua->error_msg(_("Unknown Job Type=%d\n"), jcr->JobType); + ua->error_msg(_("Unknown Job Type=%d\n"), jcr->get_JobType()); return false; } return true; @@ -1003,6 +1011,7 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) "backupclient", /* 23 */ "restoreclient", /* 24 */ "pluginoptions", /* 25 */ + "spooldata", /* 26 */ NULL}; #define YES_POS 14 @@ -1016,6 +1025,7 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) rc.fileset_name = NULL; rc.verify_job_name = NULL; rc.previous_job_name = NULL; + rc.spool_data_set = 0; for (i=1; iargc; i++) { @@ -1220,6 +1230,18 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) } kw_ok = true; break; + case 26: /* spooldata */ + if (rc.spool_data_set) { + ua->send_msg(_("Spool flag specified twice.\n")); + return false; + } + if (is_yesno(ua->argv[i], &rc.spool_data)) { + rc.spool_data_set = 1; + kw_ok = true; + } else { + ua->send_msg(_("Invalid spooldata flag.\n")); + } + break; default: break; } @@ -1300,6 +1322,11 @@ static bool scan_command_line_arguments(UAContext *ua, run_ctx &rc) } Dmsg1(100, "Using pool %s\n", rc.pool->name()); + if (rc.spool_data_set) { + rc.job->spool_data = rc.spool_data; + } + Dmsg1(900, "Spooling data: %s\n", (rc.job->spool_data ? "Yes" : "No")); + if (rc.store_name) { rc.store->store = GetStoreResWithName(rc.store_name); pm_strcpy(rc.store->store_source, _("command line"));