]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
Massive SD calling sequence reorganization
[bacula/bacula] / bacula / src / dird / dird.c
index e465a06d4b593419591710e217d99edf69c65703..6e36523d4e24cfa5eeaaf990d0dbd1f095580a8e 100644 (file)
@@ -44,8 +44,9 @@ void term_scheduler();
 void term_ua_server();
 int do_backup(JCR *jcr);
 void backup_cleanup(void);
-void start_UA_server(char *addr, int port);
+void start_UA_server(dlist *addrs);
 void init_job_server(int max_workers);
+void term_job_server();
 void store_jobtype(LEX *lc, RES_ITEM *item, int index, int pass);
 void store_level(LEX *lc, RES_ITEM *item, int index, int pass);
 void store_replace(LEX *lc, RES_ITEM *item, int index, int pass);
@@ -213,8 +214,8 @@ int main (int argc, char *argv[])
    }
 
    /* Create pid must come after we are a daemon -- so we have our final pid */
-   create_pid_file(director->pid_directory, "bacula-dir", director->DIRport);
-   read_state_file(director->working_directory, "bacula-dir", director->DIRport);
+   create_pid_file(director->pid_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs));
+   read_state_file(director->working_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs));
 
    drop(uid, gid);                   /* reduce priveleges if requested */
 
@@ -226,7 +227,7 @@ int main (int argc, char *argv[])
       4 /* UA */ + 4 /* sched+watchdog+jobsvr+misc */);
 
    Dmsg0(200, "Start UA server\n");
-   start_UA_server(director->DIRaddr, director->DIRport);
+   start_UA_server(director->DIRaddrs);
 
    start_watchdog();                 /* start network watchdog thread */
 
@@ -256,10 +257,11 @@ static void terminate_dird(int sig)
       exit(1);
    }
    already_here = TRUE;
-   write_state_file(director->working_directory, "bacula-dir", director->DIRport);
-   delete_pid_file(director->pid_directory, "bacula-dir", director->DIRport);
+   write_state_file(director->working_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs));
+   delete_pid_file(director->pid_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs));
 // signal(SIGCHLD, SIG_IGN);          /* don't worry about children now */
    term_scheduler();
+   term_job_server();
    if (runjob) {
       free(runjob);
    }
@@ -521,6 +523,9 @@ Without that I don't know who I am :-(\n"), configfile);
                  }
                  *svalue = bstrdup(*def_svalue);
                  set_bit(i, job->hdr.item_present);
+              /*
+               * Handle resources   
+               */
               } else if (job_items[i].handler == store_res) {
                  def_svalue = (char **)((char *)(job->jobdefs) + offset);
                   Dmsg4(400, "Job \"%s\", field \"%s\" item %d offset=%u\n", 
@@ -531,6 +536,22 @@ Without that I don't know who I am :-(\n"), configfile);
                  }
                  *svalue = *def_svalue;
                  set_bit(i, job->hdr.item_present);
+              /*
+               * Handle alist resources
+               */
+              } else if (job_items[i].handler == store_alist_res) {
+                 int count = job_items[i].default_value;
+                 def_svalue = (char **)((char *)(job->jobdefs) + offset);
+                  Dmsg4(400, "Job \"%s\", field \"%s\" item %d offset=%u\n", 
+                      job->hdr.name, job_items[i].name, i, offset);
+                 svalue = (char **)((char *)job + offset);
+                 if (*svalue) {
+                     Pmsg1(000, "Hey something is wrong. p=0x%lu\n", *svalue);
+                 }
+                 while (count--) {
+                    *svalue++ = *def_svalue++;
+                 }
+                 set_bit(i, job->hdr.item_present);
               /*
                * Handle integer fields 
                *    Note, our store_yesno does not handle bitmaped fields
@@ -569,7 +590,7 @@ Without that I don't know who I am :-(\n"), configfile);
       for (i=0; job_items[i].name; i++) {
         if (job_items[i].flags & ITEM_REQUIRED) {
               if (!bit_is_set(i, job->hdr.item_present)) {  
-                  Jmsg(NULL, M_FATAL, 0, "Field \"%s\" in Job \"%s\" resource is required, but not found.\n",
+                  Jmsg(NULL, M_FATAL, 0, "\"%s\" directive in Job \"%s\" resource is required, but not found.\n",
                    job_items[i].name, job->hdr.name);
                  OK = false;
                }
@@ -591,7 +612,8 @@ Without that I don't know who I am :-(\n"), configfile);
        */
       db = db_init_database(NULL, catalog->db_name, catalog->db_user,
                         catalog->db_password, catalog->db_address,
-                        catalog->db_port, catalog->db_socket);
+                        catalog->db_port, catalog->db_socket, 
+                        catalog->mult_db_connections);
       if (!db || !db_open_database(NULL, db)) {
          Jmsg(NULL, M_FATAL, 0, _("Could not open database \"%s\".\n"),
              catalog->db_name);