]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/job.c
Massive SD calling sequence reorganization
[bacula/bacula] / bacula / src / dird / job.c
index 75c00d66015700c57666b6b274300f01ada7cc54..33935436d76bae0f8c2b6c9eed44c2299fc2f7e9 100644 (file)
@@ -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)
 {
@@ -73,11 +74,7 @@ void init_job_server(int max_workers)
 
 void term_job_server()
 {
-   int stat;
-   if ((stat=jobq_destroy(&job_queue)) != 0) {
-      berrno be;
-      Emsg1(M_INFO, 0, _("Could not term job queue: ERR=%s\n"), be.strerror(stat));
-   }
+   jobq_destroy(&job_queue);         /* ignore any errors */
 }
 
 /*
@@ -111,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);
@@ -233,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;
@@ -332,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; 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;
@@ -731,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; 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);