]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Add code to help Dan debug 2drive-incremental-2disk test.
authorKern Sibbald <kern@sibbald.com>
Thu, 13 Sep 2007 21:47:10 +0000 (21:47 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 13 Sep 2007 21:47:10 +0000 (21:47 +0000)
kes  Add code to try to fix bug #908.
kes  Add waits to multiple exit detection code to try to force pid
     file to always be deleted.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5550 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/dird.c
bacula/src/dird/fd_cmds.c
bacula/src/dird/msgchan.c
bacula/src/filed/authenticate.c
bacula/src/filed/filed.c
bacula/src/filed/job.c
bacula/src/stored/authenticate.c
bacula/src/stored/dev.c
bacula/src/stored/job.c
bacula/src/stored/stored.c
bacula/technotes-2.3

index 2b30c065c56ad5418703b5694ff829f14bbfcdee..45ae5a68184278bcb5c0f00e057da302cd722ca2 100644 (file)
@@ -319,6 +319,7 @@ void terminate_dird(int sig)
    static bool already_here = false;
 
    if (already_here) {                /* avoid recursive temination problems */
+      bmicrosleep(2, 0);              /* yield */
       exit(1);
    }
    already_here = true;
@@ -326,7 +327,6 @@ void terminate_dird(int sig)
    generate_daemon_event(NULL, "Exit");
    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) {
index 3aa372472fc829bcb57f70ce0217fc1be076442e..45b7fa7eb12270c24ba49c51989260d4c17b3136 100644 (file)
@@ -113,8 +113,11 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time,
    /*
     * Now send JobId and authorization key
     */
-   bnet_fsend(fd, jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, jcr->VolSessionId,
+   fd->fsend(jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, jcr->VolSessionId,
       jcr->VolSessionTime, jcr->sd_auth_key);
+   if (debug_level == 3) {
+      Dmsg1(000, ">filed: %s", fd->msg);
+   }
    if (strcmp(jcr->sd_auth_key, "dummy") != 0) {
       memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key));
    }
index 935a9d08ab0764188a620e7cc613db6b79971e5a..b915f55290f15de9fd7eae3eeeaaf07e5c771811 100644 (file)
@@ -191,6 +191,9 @@ bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore)
    Dmsg1(100, ">stored: %s\n", sd->msg);
    if (bget_dirmsg(sd) > 0) {
        Dmsg1(100, "<stored: %s", sd->msg);
+       if (debug_level == 3) {
+          Dmsg1(000, "<stored: %s", sd->msg);
+       }
        if (sscanf(sd->msg, OKjob, &jcr->VolSessionId,
                   &jcr->VolSessionTime, &auth_key) != 3) {
           Dmsg1(100, "BadJob=%s\n", sd->msg);
index 4ed53cdffce04e21cb49ca410173287f3a7747e5..00db82327b9f468ef25fb0a62750655d87da6d91 100644 (file)
@@ -225,6 +225,9 @@ int authenticate_storagedaemon(JCR *jcr)
    }
 
    /* Respond to SD challenge */
+   if (debug_level == 3) {
+      Dmsg1(000, "sd_auth_key=%s\n", jcr->sd_auth_key);
+   }
    auth_success = cram_md5_respond(sd, jcr->sd_auth_key, &tls_remote_need, &compatible);
    if (job_canceled(jcr)) {
       auth_success = false;     /* force quick exit */
@@ -273,6 +276,9 @@ int authenticate_storagedaemon(JCR *jcr)
 auth_fatal:
    /* Destroy session key */
    memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key));
+   if (debug_level == 3) {
+      Dmsg0(000, "zap sd_auth_key\n");
+   }
    stop_bsock_timer(tid);
    /* Single thread all failures to avoid DOS */
    if (!auth_success) {
index 6852b0ccef43621ca476b66a198f2fadce424d01..277e32d9947680bd20be860e9ec2dfb6b4de6c68 100644 (file)
@@ -235,6 +235,7 @@ void terminate_filed(int sig)
    static bool already_here = false;
 
    if (already_here) {
+      bmicrosleep(2, 0);              /* yield */
       exit(1);                        /* prevent loops */
    }
    already_here = true;
index d8f0d007804d3441c3c6e69d6e999e746ff987f2..561297044b7fe73d9257a9f5079106fb28f549d9 100644 (file)
@@ -406,7 +406,7 @@ static int setdebug_cmd(JCR *jcr)
    }
    debug_level = level;
    set_trace(trace_flag);
-   return bnet_fsend(dir, OKsetdebug, level);
+   return dir->fsend(OKsetdebug, level);
 }
 
 
@@ -418,11 +418,11 @@ static int estimate_cmd(JCR *jcr)
    if (sscanf(dir->msg, estimatecmd, &jcr->listing) != 1) {
       pm_strcpy(jcr->errmsg, dir->msg);
       Jmsg(jcr, M_FATAL, 0, _("Bad estimate command: %s"), jcr->errmsg);
-      bnet_fsend(dir, _("2992 Bad estimate command.\n"));
+      dir->fsend(_("2992 Bad estimate command.\n"));
       return 0;
    }
    make_estimate(jcr);
-   bnet_fsend(dir, OKest, jcr->num_files_examined,
+   dir->fsend(OKest, jcr->num_files_examined,
       edit_uint64_with_commas(jcr->JobBytes, ed2));
    bnet_sig(dir, BNET_EOD);
    return 1;
@@ -437,6 +437,9 @@ static int job_cmd(JCR *jcr)
    POOLMEM *sd_auth_key;
 
    sd_auth_key = get_memory(dir->msglen);
+   if (debug_level == 3) {
+      Dmsg1(000, "<dird: %s", dir->msg);
+   }
    if (sscanf(dir->msg, jobcmd,  &jcr->JobId, jcr->Job,
               &jcr->VolSessionId, &jcr->VolSessionTime,
               sd_auth_key) != 5) {
@@ -447,9 +450,12 @@ static int job_cmd(JCR *jcr)
       return 0;
    }
    jcr->sd_auth_key = bstrdup(sd_auth_key);
+   if (debug_level == 3) {
+      Dmsg1(000, "sd_auth_key=%s\n", jcr->sd_auth_key);
+   }
    free_pool_memory(sd_auth_key);
    Dmsg2(120, "JobId=%d Auth=%s\n", jcr->JobId, jcr->sd_auth_key);
-   return bnet_fsend(dir, OKjob, VERSION, LSMDATE, HOST_OS, DISTNAME, DISTVER);
+   return dir->fsend(OKjob, VERSION, LSMDATE, HOST_OS, DISTNAME, DISTVER);
 }
 
 static int runbefore_cmd(JCR *jcr)
@@ -463,7 +469,7 @@ static int runbefore_cmd(JCR *jcr)
    if (sscanf(dir->msg, runbefore, cmd) != 1) {
       pm_strcpy(jcr->errmsg, dir->msg);
       Jmsg1(jcr, M_FATAL, 0, _("Bad RunBeforeJob command: %s\n"), jcr->errmsg);
-      bnet_fsend(dir, _("2905 Bad RunBeforeJob command.\n"));
+      dir->fsend(_("2905 Bad RunBeforeJob command.\n"));
       free_memory(cmd);
       return 0;
    }
index f2c4485c303d309ec543d883da7f4a953150a631..d323084c2b22d513e3fed522fae5d99828c83e22 100644 (file)
@@ -1,15 +1,7 @@
-/*
- * Authenticate caller
- *
- *   Kern Sibbald, October 2000
- *
- *   Version $Id$
- *
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ * Authenticate caller
+ *
+ *   Kern Sibbald, October 2000
+ *
+ *   Version $Id$
+ *
+ */
+
 
 #include "bacula.h"
 #include "stored.h"
@@ -208,6 +209,9 @@ int authenticate_filed(JCR *jcr)
    /* Timeout Hello after 5 mins */
    btimer_t *tid = start_bsock_timer(fd, AUTH_TIMEOUT);
    /* Challenge FD */
+   if (debug_level == 3) {
+      Pmsg1(000, "sd_auth_key=%s\n", jcr->sd_auth_key);
+   }
    auth_success = cram_md5_challenge(fd, jcr->sd_auth_key, tls_local_need, compatible);
    if (auth_success) {
        /* Respond to his challenge */
index 2e2f39088bf03d150995b1ba22e9156650b305dc..d858e387c528c93579c065fcc234f69c8e8e8b4d 100644 (file)
@@ -1844,7 +1844,8 @@ void DEVICE::close()
 
    /* Clean up device packet so it can be reused */
    clear_opened();
-   state &= ~(ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF);
+   state &= ~(ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF|
+              ST_MOUNTED|ST_MEDIA|ST_SHORT|ST_FREESPACE_OK|ST_PART_SPOOLED);
    label_type = B_BACULA_LABEL;
    file = block_num = 0;
    file_size = 0;
index a0454fd97b5ca41e6f4de6e3287d4d1804aac0f2..9fa0fce53d07519b83322a852ead766af4ccb47e 100644 (file)
@@ -91,7 +91,7 @@ bool job_cmd(JCR *jcr)
               &write_part_after_job, &PreferMountedVols);
    if (stat != 13) {
       pm_strcpy(jcr->errmsg, dir->msg);
-      bnet_fsend(dir, BAD_job, stat, jcr->errmsg);
+      dir->fsend(BAD_job, stat, jcr->errmsg);
       Dmsg1(100, ">dird: %s", dir->msg);
       set_jcr_job_status(jcr, JS_ErrorTerminated);
       return false;
@@ -135,7 +135,10 @@ bool job_cmd(JCR *jcr)
     * Pass back an authorization key for the File daemon
     */
    make_session_key(auth_key, NULL, 1);
-   bnet_fsend(dir, OKjob, jcr->VolSessionId, jcr->VolSessionTime, auth_key);
+   dir->fsend(OKjob, jcr->VolSessionId, jcr->VolSessionTime, auth_key);
+   if (debug_level == 3) {
+      Dmsg1(000, ">dird: %s", dir->msg);
+   }
    Dmsg1(100, ">dird: %s", dir->msg);
    jcr->sd_auth_key = bstrdup(auth_key);
    memset(auth_key, 0, sizeof(auth_key));
@@ -185,6 +188,9 @@ bool run_cmd(JCR *jcr)
    }
    V(mutex);
 
+   if (debug_level == 3) {
+      Dmsg0(000, "Zap sd_auth_key\n");
+   }
    memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key));
 
    if (jcr->authenticated && !job_canceled(jcr)) {
@@ -274,9 +280,9 @@ bool query_cmd(JCR *jcr)
             }  
             ok = dir_update_device(jcr, device->dev);
             if (ok) {
-               ok = bnet_fsend(dir, OK_query);
+               ok = dir->fsend(OK_query);
             } else {
-               bnet_fsend(dir, NO_query);
+               dir->fsend(NO_query);
             }
             return ok;
          }
@@ -289,9 +295,9 @@ bool query_cmd(JCR *jcr)
             }
             ok = dir_update_changer(jcr, changer);
             if (ok) {
-               ok = bnet_fsend(dir, OK_query);
+               ok = dir->fsend(OK_query);
             } else {
-               bnet_fsend(dir, NO_query);
+               dir->fsend(NO_query);
             }
             return ok;
          }
@@ -299,12 +305,12 @@ bool query_cmd(JCR *jcr)
       /* If we get here, the device/autochanger was not found */
       unbash_spaces(dir->msg);
       pm_strcpy(jcr->errmsg, dir->msg);
-      bnet_fsend(dir, NO_device, dev_name.c_str());
+      dir->fsend(NO_device, dev_name.c_str());
       Dmsg1(100, ">dird: %s\n", dir->msg);
    } else {
       unbash_spaces(dir->msg);
       pm_strcpy(jcr->errmsg, dir->msg);
-      bnet_fsend(dir, BAD_query, jcr->errmsg);
+      dir->fsend(BAD_query, jcr->errmsg);
       Dmsg1(100, ">dird: %s\n", dir->msg);
    }
 
@@ -322,7 +328,7 @@ void stored_free_jcr(JCR *jcr)
 {
    Dmsg1(900, "stored_free_jcr JobId=%u\n", jcr->JobId);
    if (jcr->file_bsock) {
-      bnet_close(jcr->file_bsock);
+      jcr->file_bsock->close();
       jcr->file_bsock = NULL;
    }
    if (jcr->job_name) {
index 3a5eff611fea539f9f56cec88859ea866521f360..070e788d8f6ba53859efbe80498e6e9ffe2e5a14 100644 (file)
@@ -534,6 +534,7 @@ void terminate_stored(int sig)
    JCR *jcr;
 
    if (in_here) {                     /* prevent loops */
+      bmicrosleep(2, 0);              /* yield */
       exit(1);
    }
    in_here = true;
index 4ce2834e951b06a51056a85855d051e0e358efde..658c56473e818a2c1acee44857f4eb2776f17cbc 100644 (file)
@@ -2,6 +2,12 @@
 
 General:
 13Sep07
+kes  Add code to help Dan debug 2drive-incremental-2disk test.
+kes  Add code to try to fix bug #908.
+kes  Add waits to multiple exit detection code to try to force pid
+     file to always be deleted.
+kes  Restore good dev.tar.gz to rescue set appropriate binary property.
+     This fixes bug #950.
 kes  Fix seg fault in error exit of acquire_for_read after unsuccessfully
      trying to switch drives by checking for blocking before unblocking.
      Fixes bug #906.