]> git.sur5r.net Git - bacula/bacula/commitdiff
more job-restart code
authorKern Sibbald <kern@sibbald.com>
Tue, 15 Sep 2009 18:01:37 +0000 (11:01 -0700)
committerKern Sibbald <kern@sibbald.com>
Thu, 17 Sep 2009 10:47:22 +0000 (12:47 +0200)
bacula/src/dird/jobq.c
bacula/src/dird/msgchan.c
bacula/src/jcr.h
bacula/src/stored/job.c

index 8e93945ac944bdc035f91736cdbc364faf5af81d..e5db9c46d8acb5282a9c3445f570d530d869d4d6 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2003-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2003-2009 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.
@@ -37,7 +37,6 @@
  *
  *  Kern Sibbald, July MMIII
  *
- *   Version $Id$
  *
  *  This code was adapted from the Bacula workq, which was
  *    adapted from "Programming with POSIX Threads", by
index 03050567137b3bdaea9c28f5724727faab5a87dc..2c9065f1dd2e5beb6b030b6761490c210c1451cb 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 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.
@@ -40,7 +40,6 @@
  *    Create a thread to interact with the Storage daemon
  *      who returns a job status and requests Catalog services, etc.
  *
- *   Version $Id$
  */
 
 #include "bacula.h"
@@ -51,7 +50,8 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 /* Commands sent to Storage daemon */
 static char jobcmd[]     = "JobId=%s job=%s job_name=%s client_name=%s "
    "type=%d level=%d FileSet=%s NoAttr=%d SpoolAttr=%d FileSetMD5=%s "
-   "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s\n";
+   "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s "  
+   "Resched=%d\n";
 static char use_storage[] = "use storage=%s media_type=%s pool_name=%s "
    "pool_type=%s append=%d copy=%d stripe=%d\n";
 static char use_device[] = "use device=%s\n";
index 8513fe6d4400bd6809e7c2148c217bcd1d7ced18..2700e2d447a95ea6037a79592a2449e57d11d479 100644 (file)
@@ -414,6 +414,7 @@ public:
    alist *reserve_msgs;               /* reserve fail messages */
    bool write_part_after_job;         /* Set to write part after job */
    bool PreferMountedVols;            /* Prefer mounted vols rather than new */
+   bool Resched;                      /* Job may be rescheduled */
 
    /* Parmaters for Open Read Session */
    BSR *bsr;                          /* Bootstrap record -- has everything */
index 4bb402fc4edad28e74f1bebca8f42aa9e46d262c..af54c516562806050337408e1aec19c4c56ce86f 100644 (file)
@@ -30,8 +30,6 @@
  *
  *   Kern Sibbald, MM
  *
- *   Version $Id$
- *
  */
 
 #include "bacula.h"
@@ -47,10 +45,15 @@ extern uint32_t newVolSessionId();
 extern bool do_mac(JCR *jcr);
 
 /* Requests from the Director daemon */
+/* Added in 3.1.4 14Sep09 KES */
 static char jobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s "
       "type=%d level=%d FileSet=%127s NoAttr=%d SpoolAttr=%d FileSetMD5=%127s "
-      "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s\n";
+      "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s "
+      "Resched=%d\n";
 static char oldjobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s "
+      "type=%d level=%d FileSet=%127s NoAttr=%d SpoolAttr=%d FileSetMD5=%127s "
+      "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d SpoolSize=%s\n";
+static char oldoldjobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s "
       "type=%d level=%d FileSet=%127s NoAttr=%d SpoolAttr=%d FileSetMD5=%127s "
       "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d\n";
 
@@ -83,6 +86,7 @@ bool job_cmd(JCR *jcr)
    POOL_MEM job_name, client_name, job, fileset_name, fileset_md5;
    int JobType, level, spool_attributes, no_attributes, spool_data;
    int write_part_after_job, PreferMountedVols;
+   int Resched = 0;
    int stat;
    JCR *ojcr;
 
@@ -95,20 +99,29 @@ bool job_cmd(JCR *jcr)
               client_name.c_str(),
               &JobType, &level, fileset_name.c_str(), &no_attributes,
               &spool_attributes, fileset_md5.c_str(), &spool_data,
-              &write_part_after_job, &PreferMountedVols, spool_size);
-   if (stat != 14) {
+              &write_part_after_job, &PreferMountedVols, spool_size,
+              Resched);
+   if (stat != 15) {
       /* Try old version */
-      stat = sscanf(dir->msg, oldjobcmd, &JobId, job.c_str(), job_name.c_str(),
-              client_name.c_str(),
-              &JobType, &level, fileset_name.c_str(), &no_attributes,
-              &spool_attributes, fileset_md5.c_str(), &spool_data,
-              &write_part_after_job, &PreferMountedVols);
-      if (stat != 13) {
-         pm_strcpy(jcr->errmsg, dir->msg);
-         dir->fsend(BAD_job, stat, jcr->errmsg);
-         Dmsg1(100, ">dird: %s", dir->msg);
-         set_jcr_job_status(jcr, JS_ErrorTerminated);
-         return false;
+      stat = sscanf(dir->msg, jobcmd, &JobId, job.c_str(), job_name.c_str(),
+                 client_name.c_str(),
+                 &JobType, &level, fileset_name.c_str(), &no_attributes,
+                 &spool_attributes, fileset_md5.c_str(), &spool_data,
+                 &write_part_after_job, &PreferMountedVols, spool_size);
+      if (stat != 14) {
+         /* Try oldold version */
+         stat = sscanf(dir->msg, oldoldjobcmd, &JobId, job.c_str(), job_name.c_str(),
+                 client_name.c_str(),
+                 &JobType, &level, fileset_name.c_str(), &no_attributes,
+                 &spool_attributes, fileset_md5.c_str(), &spool_data,
+                 &write_part_after_job, &PreferMountedVols);
+         if (stat != 13) {
+            pm_strcpy(jcr->errmsg, dir->msg);
+            dir->fsend(BAD_job, stat, jcr->errmsg);
+            Dmsg1(100, ">dird: %s", dir->msg);
+            set_jcr_job_status(jcr, JS_ErrorTerminated);
+            return false;
+         }
       }
    }
    /*
@@ -145,6 +158,7 @@ bool job_cmd(JCR *jcr)
    pm_strcpy(jcr->fileset_md5, fileset_md5);
    jcr->PreferMountedVols = PreferMountedVols;
 
+
    jcr->authenticated = false;
 
    /*