Emsg0(M_ERROR_TERM, 0, _("Too many items in Job resource\n"));
}
}
+ if (!job->storage && !job->pool->storage) {
+ Jmsg(NULL, M_FATAL, 0, _("No storage specified in Job \"%s\" nor in Pool.\n"),
+ job->hdr.name);
+ OK = false;
+ }
} /* End loop over Job res */
/* Loop over databases */
Dmsg0(200, "End dird free_jcr\n");
}
+/*
+ * The Job storage definition must be either in the Job record
+ * or in the Pool record. The Pool record overrides the Job
+ * record.
+ */
+STORE *get_job_storage(JOB *job)
+{
+ if (job->pool->storage) {
+ return (STORE *)job->pool->storage->first();
+ } else {
+ return (STORE *)job->storage->first();
+ }
+}
+
/*
* Set some defaults in the JCR necessary to
* run. These items are pulled from the job
}
jcr->JobPriority = job->Priority;
/* Copy storage definitions -- deleted in dir_free_jcr above */
- copy_rwstorage(jcr, job->storage, _("Job resource"));
+ if (job->storage) {
+ copy_rwstorage(jcr, job->storage, _("Job resource"));
+ } else {
+ copy_rwstorage(jcr, job->pool->storage, _("Job resource"));
+ }
jcr->client = job->client;
if (!jcr->client_name) {
jcr->client_name = get_pool_memory(PM_NAME);
/* Set storage override */
void set_rwstorage(JCR *jcr, STORE *store)
{
+ if (!store) {
+ Jmsg(jcr, M_FATAL, 0, _("No storage specified.\n"));
+ return;
+ }
set_rstorage(jcr, store);
set_wstorage(jcr, store);
}
{
STORE *storage;
+ if (!store) {
+ return;
+ }
+ if (!jcr->rstorage) {
+ jcr->rstorage = New(alist(10, not_owned_by_alist));
+ }
jcr->rstore = store;
foreach_alist(storage, jcr->rstorage) {
if (store == storage) {
{
STORE *storage;
+ if (!store) {
+ return;
+ }
+ if (!jcr->wstorage) {
+ jcr->wstorage = New(alist(10, not_owned_by_alist));
+ }
jcr->wstore = store;
foreach_alist(storage, jcr->wstorage) {
if (store == storage) {
jcr->wstore = NULL;
}
-
-
void create_clones(JCR *jcr)
{
/*
extern void apply_pool_overrides(JCR *jcr);
extern JobId_t run_job(JCR *jcr);
extern bool cancel_job(UAContext *ua, JCR *jcr);
+extern STORE *get_job_storage(JOB *job);
extern void init_jcr_job_record(JCR *jcr);
extern void copy_rwstorage(JCR *jcr, alist *storage, const char *where);
extern void set_rwstorage(JCR *jcr, STORE *store);
bsendmsg(ua, "pool=%s", job->pool->hdr.name);
bsendmsg(ua, "messages=%s", job->messages->hdr.name);
bsendmsg(ua, "client=%s", job->client->hdr.name);
- store = (STORE *)job->storage->first();
+ store = get_job_storage(job);
bsendmsg(ua, "storage=%s", store->hdr.name);
bsendmsg(ua, "where=%s", job->RestoreWhere?job->RestoreWhere:"");
bsendmsg(ua, "level=%s", level_to_str(job->JobLevel));
if (run->storage) {
jcr->wstore = run->storage;
} else {
- jcr->wstore = (STORE *)job->storage->first();
+ jcr->wstore = get_job_storage(job);
}
mr.StorageId = jcr->wstore->StorageId;
if (!find_next_volume_for_append(jcr, &mr, 1, false/*no create*/)) {
}
store = select_storage_resource(ua);
}
- } else if (job->storage) {
- store = (STORE *)job->storage->first(); /* use default */
+ } else {
+ store = get_job_storage(job); /* use default */
}
if (!store) {
return 1;
if (run->storage) {
store = run->storage;
} else {
- store = (STORE *)job->storage->first();
+ store = get_job_storage(job);
}
if (!hdr_printed) {
prt_runhdr(ua);
Technical notes on version 1.39
General:
+22Nov06
+kes Make sure that the storage for a job is pulled first from
+ the Pool and if not from the Job.
+kes Ensure that either the Pool or the Job specifies a Storage
+ resource.
21Nov06
kes Start applying new FSFE copyright.
20Nov06