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);
}
/* 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 */
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 */
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);
}
}
*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",
}
*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
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;
}
*/
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);