]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Fix bug with job name duplication if more than 60 jobs created
authorKern Sibbald <kern@sibbald.com>
Thu, 6 Nov 2008 21:40:43 +0000 (21:40 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 6 Nov 2008 21:40:43 +0000 (21:40 +0000)
     during a minute.
kes  Correct some bugs of cleanup in SD if the FD connection fails

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

bacula/src/dird/job.c
bacula/src/lib/bnet_server.c
bacula/src/stored/dircmd.c
bacula/src/stored/job.c
bacula/src/version.h
bacula/technotes-2.5

index f7f7810c26ab037c2393e6231fd772a8588e398b..2fb91119be05bae87269952ddccbb501bf6c08b5 100644 (file)
@@ -874,17 +874,17 @@ void create_unique_job_name(JCR *jcr, const char *base_name)
    static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    static time_t last_start_time = 0;
    static int seq = 0;
-   time_t now;
+   time_t now = time(NULL);
    struct tm tm;
    char dt[MAX_TIME_LENGTH];
    char name[MAX_NAME_LENGTH];
    char *p;
+   int len;
 
    /* Guarantee unique start time -- maximum one per second, and
     * thus unique Job Name
     */
    P(mutex);                          /* lock creation of jobs */
-   now = time(NULL);
    seq++;
    if (seq > 59) {                    /* wrap as if it is seconds */
       seq = 0;
@@ -899,9 +899,10 @@ void create_unique_job_name(JCR *jcr, const char *base_name)
    /* Form Unique JobName */
    (void)localtime_r(&now, &tm);
    /* Use only characters that are permitted in Windows filenames */
-   strftime(dt, sizeof(dt), "%Y-%m-%d_%H.%M", &tm);
+   strftime(dt, sizeof(dt), "%Y-%m-%d_%H.%M.%S", &tm);
+   len = strlen(dt) + 5;   /* dt + .%02d EOS */
    bstrncpy(name, base_name, sizeof(name));
-   name[sizeof(name)-22] = 0;          /* truncate if too long */
+   name[sizeof(name)-len] = 0;          /* truncate if too long */
    bsnprintf(jcr->Job, sizeof(jcr->Job), "%s.%s.%02d", name, dt, seq); /* add date & time */
    /* Convert spaces into underscores */
    for (p=jcr->Job; *p; p++) {
@@ -909,6 +910,7 @@ void create_unique_job_name(JCR *jcr, const char *base_name)
          *p = '_';
       }
    }
+   Dmsg2(100, "JobId=%u created Job=%s\n", jcr->JobId, jcr->Job);
 }
 
 /* Called directly from job rescheduling */
index fcd9483f1ce86e17400ae3345a0921af2ad3ebab..eb3969d199f0e1bfd8327a81e0da3c2dc9f5c14b 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2008 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.
@@ -137,7 +137,7 @@ bnet_thread_server(dlist *addrs, int max_clients, workq_t *client_wq,
                   be.bstrerror());
          }
       }
-      listen(fd_ptr->fd, 5);       /* tell system we are ready */
+      listen(fd_ptr->fd, 50);      /* tell system we are ready */
       sockfds.append(fd_ptr);
    }
    /* Start work queue thread */
@@ -239,4 +239,3 @@ bnet_thread_server(dlist *addrs, int max_clients, workq_t *client_wq,
    }
 }
 
-
index a53efa31c3cb443e4e22fdb178df95e1333652a0..47370524a1296ab52f3e7e06913d45cba8df1c5d 100644 (file)
@@ -175,6 +175,7 @@ void *handle_connection_request(void *arg)
    if (sscanf(bs->msg, "Hello Start Job %127s", name) == 1) {
       Dmsg1(110, "Got a FD connection at %s\n", bstrftimes(tbuf, sizeof(tbuf), 
             (utime_t)time(NULL)));
+      Dmsg1(50, "%s", bs->msg);
       handle_filed_connection(bs, name);
       return NULL;
    }
index 431071c582e0dc321414fabbad707ea26f9c5f97..c76beb88166f4248582ce387e1614f9a1f0b886e 100644 (file)
@@ -154,7 +154,7 @@ bool job_cmd(JCR *jcr)
    bsnprintf(seed, sizeof(seed), "%p%d", jcr, JobId);
    make_session_key(auth_key, seed, 1);
    dir->fsend(OKjob, jcr->VolSessionId, jcr->VolSessionTime, auth_key);
-   Dmsg2(100, ">dird jid=%u: %s", (uint32_t)jcr->JobId, dir->msg);
+   Dmsg2(50, ">dird jid=%u: %s", (uint32_t)jcr->JobId, dir->msg);
    jcr->sd_auth_key = bstrdup(auth_key);
    memset(auth_key, 0, sizeof(auth_key));
    generate_daemon_event(jcr, "JobStart");
@@ -186,7 +186,7 @@ bool run_cmd(JCR *jcr)
    timeout.tv_nsec = tv.tv_usec * 1000;
    timeout.tv_sec = tv.tv_sec + me->client_wait;
 
-   Dmsg3(050, "%s waiting %d sec for FD to contact SD key=%s\n",
+   Dmsg3(50, "%s waiting %d sec for FD to contact SD key=%s\n",
          jcr->Job, (int)(timeout.tv_sec-time(NULL)), jcr->sd_auth_key);
 
    /*
@@ -201,14 +201,14 @@ bool run_cmd(JCR *jcr)
          break;
       }
    }
-   Dmsg3(100, "Auth=%d canceled=%d errstat=%d\n", jcr->authenticated,
+   Dmsg3(50, "Auth=%d canceled=%d errstat=%d\n", jcr->authenticated,
       job_canceled(jcr), errstat);
    V(mutex);
 
    memset(jcr->sd_auth_key, 0, strlen(jcr->sd_auth_key));
 
    if (jcr->authenticated && !job_canceled(jcr)) {
-      Dmsg1(100, "Running job %s\n", jcr->Job);
+      Dmsg1(50, "Running job %s\n", jcr->Job);
       run_job(jcr);                   /* Run the job */
    }
    return false;
@@ -230,30 +230,35 @@ void handle_filed_connection(BSOCK *fd, char *job_name)
    if (!(jcr=get_jcr_by_full_name(job_name))) {
       Jmsg1(NULL, M_FATAL, 0, _("FD connect failed: Job name not found: %s\n"), job_name);
       Dmsg1(3, "**** Job \"%s\" not found.\n", job_name);
+      fd->close();
       return;
    }
 
-   jcr->file_bsock = fd;
-   jcr->file_bsock->set_jcr(jcr);
 
-   Dmsg1(110, "Found Job %s\n", job_name);
+   Dmsg1(50, "Found Job %s\n", job_name);
 
    if (jcr->authenticated) {
       Jmsg2(jcr, M_FATAL, 0, _("Hey!!!! JobId %u Job %s already authenticated.\n"),
          (uint32_t)jcr->JobId, jcr->Job);
+      Dmsg2(50, "Hey!!!! JobId %u Job %s already authenticated.\n",
+         (uint32_t)jcr->JobId, jcr->Job);
+      fd->close();
       free_jcr(jcr);
       return;
    }
 
+   jcr->file_bsock = fd;
+   jcr->file_bsock->set_jcr(jcr);
+
    /*
     * Authenticate the File daemon
     */
    if (jcr->authenticated || !authenticate_filed(jcr)) {
-      Dmsg1(100, "Authentication failed Job %s\n", jcr->Job);
+      Dmsg1(50, "Authentication failed Job %s\n", jcr->Job);
       Jmsg(jcr, M_FATAL, 0, _("Unable to authenticate File daemon\n"));
    } else {
       jcr->authenticated = true;
-      Dmsg2(110, "OK Authentication jid=%u Job %s\n", (uint32_t)jcr->JobId, jcr->Job);
+      Dmsg2(50, "OK Authentication jid=%u Job %s\n", (uint32_t)jcr->JobId, jcr->Job);
    }
 
    if (!jcr->authenticated) {
index ac7612dc900d7ce7747ee7633bf9288c581ee301..b3826f0c95959e7aaf58b4ae6bc862ac02e13029 100644 (file)
@@ -3,9 +3,9 @@
  */
 
 #undef  VERSION
-#define VERSION "2.5.18"
-#define BDATE   "02 November 2008"
-#define LSMDATE "02Nov08"
+#define VERSION "2.5.19"
+#define BDATE   "06 November 2008"
+#define LSMDATE "06Nov08"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2008"       /* year for copyright messages in progs */
index 6746fb782d49322b98cf917aa09d62363df59fad..2c8df3f55225354bc34458fe08b1c3723359a5da 100644 (file)
@@ -11,7 +11,10 @@ mixed priorities
 
 General:
 06Nov08
-ebl  Add code to get more information after a violent signal.
+kes  Fix bug with job name duplication if more than 60 jobs created
+     during a minute.
+kes  Correct some bugs of cleanup in SD if the FD connection fails.
+ebl  Add code to get more information after a fatal signal.
 05Nov08
 ebl  Apply Bastian's patch that add spooldata=yes|no option
      to run command.