]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
correct date
[bacula/bacula] / bacula / src / dird / dird.c
index c5e1f5ef0a345a3a9b93745c2b31aeac9e796980..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;
@@ -98,61 +97,60 @@ int main (int argc, char *argv[])
    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: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 'v':                    /* verbose */
+        verbose++;
+        break;
 
-         case '?':
-        default:
-           usage();
+      case '?':
+      default:
+        usage();
 
       }  
    }
@@ -162,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) {
@@ -243,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);
@@ -369,9 +366,12 @@ 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)) {
+        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       
@@ -380,6 +380,30 @@ Without that I don't know who I am :-(\n"), configfile);
            if (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);
         }