extern void term_scheduler();
extern void term_ua_server();
extern int do_backup(JCR *jcr);
+extern bool do_mac(JCR *jcr);
extern int do_admin(JCR *jcr);
extern int do_restore(JCR *jcr);
extern int do_verify(JCR *jcr);
/* Imported variables */
extern time_t watchdog_time;
-jobq_t job_queue;
+jobq_t job_queue;
void init_job_server(int max_workers)
{
if ((stat = jobq_init(&job_queue, max_workers, job_thread)) != 0) {
berrno be;
- be.set_errno(stat);
- Emsg1(M_ABORT, 0, _("Could not init job queue: ERR=%s\n"), be.strerror());
+ Emsg1(M_ABORT, 0, _("Could not init job queue: ERR=%s\n"), be.strerror(stat));
}
if ((wd = new_watchdog()) == NULL) {
Emsg0(M_ABORT, 0, _("Could not init job monitor watchdogs\n"));
void term_job_server()
{
- int stat;
- if ((stat=jobq_destroy(&job_queue)) != 0) {
- berrno be;
- be.set_errno(stat);
- Emsg1(M_INFO, 0, _("Could not term job queue: ERR=%s\n"), be.strerror());
- }
+ jobq_destroy(&job_queue); /* ignore any errors */
}
/*
/* Initialize termination condition variable */
if ((errstat = pthread_cond_init(&jcr->term_wait, NULL)) != 0) {
berrno be;
- be.set_errno(errstat);
- Jmsg1(jcr, M_FATAL, 0, _("Unable to init job cond variable: ERR=%s\n"), be.strerror());
+ Jmsg1(jcr, M_FATAL, 0, _("Unable to init job cond variable: ERR=%s\n"), be.strerror(errstat));
goto bail_out;
}
jcr->term_wait_inited = true;
Dmsg0(50, "Open database\n");
jcr->db=db_init_database(jcr, jcr->catalog->db_name, jcr->catalog->db_user,
jcr->catalog->db_password, jcr->catalog->db_address,
- jcr->catalog->db_port, jcr->catalog->db_socket);
+ jcr->catalog->db_port, jcr->catalog->db_socket,
+ jcr->catalog->mult_db_connections);
if (!jcr->db || !db_open_database(jcr, jcr->db)) {
Jmsg(jcr, M_FATAL, 0, _("Could not open database \"%s\".\n"),
jcr->catalog->db_name);
/* Queue the job to be run */
if ((stat = jobq_add(&job_queue, jcr)) != 0) {
berrno be;
- be.set_errno(stat);
- Jmsg(jcr, M_FATAL, 0, _("Could not add job queue: ERR=%s\n"), be.strerror());
+ Jmsg(jcr, M_FATAL, 0, _("Could not add job queue: ERR=%s\n"), be.strerror(stat));
JobId = 0;
goto bail_out;
}
status = close_bpipe(bpipe);
if (status != 0) {
berrno be;
- be.set_errno(status);
- Jmsg(jcr, M_FATAL, 0, _("RunBeforeJob error: ERR=%s\n"), be.strerror());
+ Jmsg(jcr, M_FATAL, 0, _("RunBeforeJob error: ERR=%s\n"), be.strerror(status));
set_jcr_job_status(jcr, JS_FatalError);
update_job_end_record(jcr);
goto bail_out;
do_autoprune(jcr);
}
break;
+ case JT_MIGRATION:
+ case JT_COPY:
+ case JT_ARCHIVE:
+ do_mac(jcr); /* migration, archive, copy */
+ if (jcr->JobStatus == JS_Terminated) {
+ do_autoprune(jcr);
+ }
+ break;
default:
Pmsg1(0, "Unimplemented job type: %d\n", jcr->JobType);
break;
*/
if (status != 0) {
berrno be;
- be.set_errno(status);
if (jcr->JobStatus == JS_Terminated) {
- Jmsg(jcr, M_WARNING, 0, _("RunAfterJob error: ERR=%s\n"), be.strerror());
+ Jmsg(jcr, M_WARNING, 0, _("RunAfterJob error: ERR=%s\n"), be.strerror(status));
} else {
- Jmsg(jcr, M_FATAL, 0, _("RunAfterFailedJob error: ERR=%s\n"), be.strerror());
+ Jmsg(jcr, M_FATAL, 0, _("RunAfterFailedJob error: ERR=%s\n"), be.strerror(status));
}
}
}
/* Cancel Storage daemon */
if (jcr->store_bsock) {
ua->jcr->store = jcr->store;
+ for (int i=0; i<MAX_STORE; i++) {
+ ua->jcr->storage[i] = jcr->storage[i];
+ }
if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) {
bsendmsg(ua, _("Failed to connect to Storage daemon.\n"));
return 0;
jcr->JobLevel = L_NONE;
break;
default:
- jcr->JobLevel = job->level;
+ jcr->JobLevel = job->JobLevel;
break;
}
jcr->JobPriority = job->Priority;
- jcr->store = job->storage;
+ for (int i=0; i<MAX_STORE; i++) {
+ jcr->storage[i] = job->storage[i];
+ }
jcr->client = job->client;
if (!jcr->client_name) {
jcr->client_name = get_pool_memory(PM_NAME);