]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
correct date
[bacula/bacula] / bacula / src / dird / dird.c
index 23a4d83778e31c64e4aa31002956e9d21d071e9e..b4130421222ccb25418d89b9b262928c47c2d9b4 100644 (file)
@@ -44,7 +44,6 @@ extern void term_ua_server();
 extern int do_backup(JCR *jcr);
 extern void backup_cleanup(void);
 extern void start_UA_server(char *addr, int port);
-extern void run_job(JCR *jcr);
 extern void init_job_server(int max_workers);
 
 static char *configfile = NULL;
@@ -71,6 +70,7 @@ static void usage()
 "       -s          no signals\n"
 "       -t          test - read configuration and exit\n"
 "       -u          userid\n"
+"       -v          verbose user messages\n"
 "       -?          print this message.\n"  
 "\n"));
 
@@ -94,59 +94,63 @@ int main (int argc, char *argv[])
 
    init_stack_dump();
    my_name_is(argc, argv, "bacula-dir");
+   textdomain("bacula-dir");
    init_msg(NULL, NULL);             /* initialize message handler */
    daemon_start_time = time(NULL);
-   memset(&last_job, 0, sizeof(last_job));
 
-   while ((ch = getopt(argc, argv, "c:d:fg:r:stu:?")) != -1) {
+   while ((ch = getopt(argc, argv, "c:d:fg:r:stu:v?")) != -1) {
       switch (ch) {
          case 'c':                    /* specify config file */
-           if (configfile != NULL) {
-              free(configfile);
-           }
-           configfile = bstrdup(optarg);
-           break;
+        if (configfile != NULL) {
+           free(configfile);
+        }
+        configfile = bstrdup(optarg);
+        break;
 
-         case 'd':                    /* set debug level */
-           debug_level = atoi(optarg);
-           if (debug_level <= 0) {
-              debug_level = 1; 
-           }
-            Dmsg1(0, "Debug level = %d\n", debug_level);
-           break;
+      case 'd':                    /* set debug level */
+        debug_level = atoi(optarg);
+        if (debug_level <= 0) {
+           debug_level = 1; 
+        }
+         Dmsg1(0, "Debug level = %d\n", debug_level);
+        break;
 
-         case 'f':                    /* run in foreground */
-           background = FALSE;
-           break;
+      case 'f':                    /* run in foreground */
+        background = FALSE;
+        break;
 
-         case 'g':                    /* set group id */
-           gid = optarg;
-           break;
+      case 'g':                    /* set group id */
+        gid = optarg;
+        break;
 
-         case 'r':                    /* run job */
-           if (runjob != NULL) {
-              free(runjob);
-           }
-           if (optarg) {
-              runjob = bstrdup(optarg);
-           }
-           break;
+      case 'r':                    /* run job */
+        if (runjob != NULL) {
+           free(runjob);
+        }
+        if (optarg) {
+           runjob = bstrdup(optarg);
+        }
+        break;
+
+      case 's':                    /* turn off signals */
+        no_signals = TRUE;
+        break;
 
-         case 's':                    /* turn off signals */
-           no_signals = TRUE;
-           break;
+      case 't':                    /* test config */
+        test_config = TRUE;
+        break;
 
-         case 't':                    /* test config */
-           test_config = TRUE;
-           break;
+      case 'u':                    /* set uid */
+        uid = optarg;
+        break;
 
-         case 'u':                    /* set uid */
-           uid = optarg;
-           break;
+      case 'v':                    /* verbose */
+        verbose++;
+        break;
 
-         case '?':
-        default:
-           usage();
+      case '?':
+      default:
+        usage();
 
       }  
    }
@@ -156,7 +160,6 @@ int main (int argc, char *argv[])
    if (!no_signals) {
       init_signals(terminate_dird);
    }
-   signal(SIGCHLD, SIG_IGN);
 
    if (argc) {
       if (configfile != NULL) {
@@ -177,7 +180,7 @@ int main (int argc, char *argv[])
    parse_config(configfile);
 
    if (!check_resources()) {
-      Jmsg(NULL, M_ERROR_TERM, 0, "Please correct configuration file: %s\n", configfile);
+      Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
    }
 
    if (test_config) {
@@ -237,7 +240,7 @@ static void terminate_dird(int sig)
    delete_pid_file(director->pid_directory, "bacula-dir",  
                   director->DIRport);
    stop_watchdog();
-   signal(SIGCHLD, SIG_IGN);          /* don't worry about children now */
+// signal(SIGCHLD, SIG_IGN);          /* don't worry about children now */
    term_scheduler();
    if (runjob) {
       free(runjob);
@@ -285,7 +288,7 @@ static void reload_config(int sig)
    }
 
    /* Reset globals */
-   working_directory = director->working_directory;
+   set_working_directory(director->working_directory);
    FDConnectTimeout = director->FDConnectTimeout;
    SDConnectTimeout = director->SDConnectTimeout;
  
@@ -316,11 +319,7 @@ static int check_resources()
 Without that I don't know who I am :-(\n"), configfile);
       OK = FALSE;
    } else {
-      if (!director->working_directory) {
-         Jmsg(NULL, M_FATAL, 0, _("No working directory specified. Cannot continue.\n"));
-        OK = FALSE;
-      }       
-      working_directory = director->working_directory;
+      set_working_directory(director->working_directory);
       if (!director->messages) {       /* If message resource not specified */
         director->messages = (MSGS *)GetNextRes(R_MSGS, NULL);
         if (!director->messages) {
@@ -367,14 +366,43 @@ 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);
-        if (!db_open_database(NULL, db)) {
-            Jmsg(NULL, M_FATAL,  0, "%s", db_strerror(db));
+        if (!db || !db_open_database(NULL, db)) {
+            Jmsg(NULL, M_FATAL, 0, _("Could not open database \"%s\".\n"),
+                catalog->db_name);
+           if (db) {
+               Jmsg(NULL, M_FATAL, 0, _("%s"), db_strerror(db));
+           }
+           OK = FALSE;
         } else {
            /* If a pool is defined for this job, create the pool DB       
             *  record if it is not already created. 
             */
            if (job->pool) {
-              create_pool(NULL, db, job->pool);
+              create_pool(NULL, db, job->pool, POOL_OP_UPDATE);  /* update request */
+           }
+           /* Set default value in all counters */
+           for (COUNTER *counter=NULL; (counter = (COUNTER *)GetNextRes(R_COUNTER, (RES *)counter)); ) {
+              /* Write to catalog? */
+              if (!counter->created && counter->Catalog == catalog) {
+                 COUNTER_DBR cr;
+                 bstrncpy(cr.Counter, counter->hdr.name, sizeof(cr.Counter));
+                 cr.MinValue = counter->MinValue;
+                 cr.MaxValue = counter->MaxValue;
+                 cr.CurrentValue = counter->MinValue;
+                 if (counter->WrapCounter) {
+                    bstrncpy(cr.WrapCounter, counter->WrapCounter->hdr.name, sizeof(cr.WrapCounter));
+                 } else {
+                    cr.WrapCounter[0] = 0;  /* empty string */
+                 }
+                 if (db_create_counter_record(NULL, db, &cr)) {
+                    counter->CurrentValue = cr.CurrentValue;
+                    counter->created = true;
+                     Dmsg2(100, "Create counter %s val=%d\n", counter->hdr.name, counter->CurrentValue);
+                 }
+              } 
+              if (!counter->created) {
+                 counter->CurrentValue = counter->MinValue;  /* default value */
+              }
            }
            db_close_database(NULL, db);
         }