Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of John Walker.
+ Bacula® is a registered trademark of Kern Sibbald.
The licensor of Bacula is the Free Software Foundation Europe
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
int files;
bool cloned;
bool mod;
+ int spool_data;
+ bool spool_data_set;
/* Methods */
run_ctx() { memset(this, 0, sizeof(run_ctx));
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);
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)) {
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;
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;
/* 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;
}
}
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;
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"));
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;
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:
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"
"%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,
"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,
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);
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"
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;
"backupclient", /* 23 */
"restoreclient", /* 24 */
"pluginoptions", /* 25 */
+ "spooldata", /* 26 */
NULL};
#define YES_POS 14
rc.fileset_name = NULL;
rc.verify_job_name = NULL;
rc.previous_job_name = NULL;
+ rc.spool_data_set = 0;
for (i=1; i<ua->argc; i++) {
kw_ok = true;
break;
case 25: /* pluginoptions */
+ ua->send_msg(_("Plugin Options not yet implemented.\n"));
+ return false;
if (rc.plugin_options) {
ua->send_msg(_("Plugin Options specified twice.\n"));
return false;
}
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;
}
}
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"));