X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fjob.c;h=33935436d76bae0f8c2b6c9eed44c2299fc2f7e9;hb=1c31d780ff8befc9ef13c681d991bf235cb5f735;hp=61987e12e9277c2f1ac0873ef4efb59fc655fe27;hpb=c64a45bba3f64a5f0b2086c44b194acf46f2cbe7;p=bacula%2Fbacula diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index 61987e12e9..33935436d7 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -42,6 +42,7 @@ static bool job_check_maxruntime(JCR *control_jcr, JCR *jcr); 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); @@ -49,7 +50,7 @@ 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) { @@ -58,8 +59,7 @@ 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")); @@ -74,12 +74,7 @@ void init_job_server(int max_workers) 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 */ } /* @@ -102,8 +97,7 @@ JobId_t run_job(JCR *jcr) /* 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; @@ -114,7 +108,8 @@ JobId_t run_job(JCR *jcr) 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); @@ -144,8 +139,7 @@ JobId_t run_job(JCR *jcr) /* 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; } @@ -206,8 +200,7 @@ static void *job_thread(void *arg) 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; @@ -238,6 +231,14 @@ static void *job_thread(void *arg) 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; @@ -266,11 +267,10 @@ static void *job_thread(void *arg) */ 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)); } } } @@ -338,6 +338,9 @@ int cancel_job(UAContext *ua, JCR *jcr) /* Cancel Storage daemon */ if (jcr->store_bsock) { ua->jcr->store = jcr->store; + for (int i=0; ijcr->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; @@ -737,11 +740,13 @@ void set_jcr_defaults(JCR *jcr, JOB *job) 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; istorage[i] = job->storage[i]; + } jcr->client = job->client; if (!jcr->client_name) { jcr->client_name = get_pool_memory(PM_NAME);