]> git.sur5r.net Git - bacula/bacula/commitdiff
Send bootstrap directly from DIR to SD
authorKern Sibbald <kern@sibbald.com>
Tue, 14 Jul 2009 13:44:46 +0000 (13:44 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 14 Jul 2009 13:44:46 +0000 (13:44 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8982 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/fd_cmds.c
bacula/src/dird/msgchan.c
bacula/src/dird/protos.h
bacula/src/dird/restore.c
bacula/src/dird/verify.c
bacula/src/jcr.h
bacula/src/stored/dircmd.c
bacula/src/stored/job.c
bacula/technotes

index caced8435d9ae11c0628508cc28faba6dd89baf9..b24cff0eaeb84ff79630f026c25f92a30c215a69 100644 (file)
@@ -543,43 +543,6 @@ bool send_exclude_list(JCR *jcr)
    return true;
 }
 
-
-/*
- * Send bootstrap file if any to the socket given (FD or SD).
- *  This is used for restore, verify VolumeToCatalog, and
- *  for migration.
- */
-bool send_bootstrap_file(JCR *jcr, BSOCK *sock)
-{
-   FILE *bs;
-   char buf[1000];
-   const char *bootstrap = "bootstrap\n";
-
-   Dmsg1(400, "send_bootstrap_file: %s\n", jcr->RestoreBootstrap);
-   if (!jcr->RestoreBootstrap) {
-      return true;
-   }
-   bs = fopen(jcr->RestoreBootstrap, "rb");
-   if (!bs) {
-      berrno be;
-      Jmsg(jcr, M_FATAL, 0, _("Could not open bootstrap file %s: ERR=%s\n"),
-         jcr->RestoreBootstrap, be.bstrerror());
-      set_jcr_job_status(jcr, JS_ErrorTerminated);
-      return false;
-   }
-   sock->fsend(bootstrap);
-   while (fgets(buf, sizeof(buf), bs)) {
-      sock->fsend("%s", buf);
-   }
-   sock->signal(BNET_EOD);
-   fclose(bs);
-   if (jcr->unlink_bsr) {
-      unlink(jcr->RestoreBootstrap);
-      jcr->unlink_bsr = false;
-   }                         
-   return true;
-}
-
 /* TODO: drop this with runscript.old_proto in bacula 1.42 */
 static char runbefore[]   = "RunBeforeJob %s\n";
 static char runafter[]    = "RunAfterJob %s\n";
index 1ccfb81c0c7ab28d204badfe566da118ecc72280..c00f81b9d782b1bd1fe1322e1d398dc19d9ee3ca 100644 (file)
@@ -439,6 +439,43 @@ void wait_for_storage_daemon_termination(JCR *jcr)
    set_jcr_job_status(jcr, JS_Terminated);
 }
 
+/*
+ * Send bootstrap file to Storage daemon.
+ *  This is used for restore, verify VolumeToCatalog, migration,
+ *    and copy Jobs.
+ */
+bool send_bootstrap_file(JCR *jcr, BSOCK *sd)
+{
+   FILE *bs;
+   char buf[1000];
+   const char *bootstrap = "bootstrap\n";
+
+   Dmsg1(400, "send_bootstrap_file: %s\n", jcr->RestoreBootstrap);
+   if (!jcr->RestoreBootstrap) {
+      return true;
+   }
+   bs = fopen(jcr->RestoreBootstrap, "rb");
+   if (!bs) {
+      berrno be;
+      Jmsg(jcr, M_FATAL, 0, _("Could not open bootstrap file %s: ERR=%s\n"),
+         jcr->RestoreBootstrap, be.bstrerror());
+      set_jcr_job_status(jcr, JS_ErrorTerminated);
+      return false;
+   }
+   sd->fsend(bootstrap);
+   while (fgets(buf, sizeof(buf), bs)) {
+      sd->fsend("%s", buf);
+   }
+   sd->signal(BNET_EOD);
+   fclose(bs);
+   if (jcr->unlink_bsr) {
+      unlink(jcr->RestoreBootstrap);
+      jcr->unlink_bsr = false;
+   }                         
+   return true;
+}
+
+
 #ifdef needed
 #define MAX_TRIES 30
 #define WAIT_TIME 2
index ba73912b275f294b0c2bb0b1210fe486a57f7370..2ae354104c3e671572f8603940e70ba081fbf112 100644 (file)
@@ -97,7 +97,6 @@ extern int connect_to_file_daemon(JCR *jcr, int retry_interval,
                                   int max_retry_time, int verbose);
 extern bool send_include_list(JCR *jcr);
 extern bool send_exclude_list(JCR *jcr);
-extern bool send_bootstrap_file(JCR *jcr, BSOCK *sock);
 extern bool send_level_command(JCR *jcr);
 extern int get_attributes_and_put_in_catalog(JCR *jcr);
 extern void get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId);
@@ -162,6 +161,7 @@ extern bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore,
 extern bool start_storage_daemon_message_thread(JCR *jcr);
 extern int bget_dirmsg(BSOCK *bs);
 extern void wait_for_storage_daemon_termination(JCR *jcr);
+extern bool send_bootstrap_file(JCR *jcr, BSOCK *sd);
 
 /* next_vol.c */
 int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index,
index 3e88b59941cfebf36ae9c2b8b22fcd44a569c015..434842255fe3eb94d2428c93cc0986375143c441 100644 (file)
@@ -57,7 +57,9 @@ static char storaddr[]    = "storage address=%s port=%d ssl=0\n";
 /* Responses received from File daemon */
 static char OKrestore[]   = "2000 OK restore\n";
 static char OKstore[]     = "2000 OK storage\n";
-static char OKbootstrap[] = "2000 OK bootstrap\n";
+
+/* Responses received from the Storage daemon */
+static char OKbootstrap[] = "3000 OK bootstrap\n";
 
 /*
  * Do a restore of the specified files
@@ -67,7 +69,7 @@ static char OKbootstrap[] = "2000 OK bootstrap\n";
  */
 bool do_restore(JCR *jcr)
 {
-   BSOCK   *fd;
+   BSOCK   *fd, *sd;
    JOB_DBR rjr;                       /* restore job record */
    char replace, *where, *cmd;
    char empty = '\0';
@@ -114,13 +116,23 @@ bool do_restore(JCR *jcr)
    if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
       goto bail_out;
    }
+   sd = jcr->store_bsock;
    /*
     * Now start a job with the Storage daemon
     */
    if (!start_storage_daemon_job(jcr, jcr->rstorage, NULL)) {
       goto bail_out;
    }
-   if (!jcr->store_bsock->fsend("run")) {
+
+   /*
+    * Send the bootstrap file -- what Volumes/files to restore
+    */
+   if (!send_bootstrap_file(jcr, sd) ||
+       !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) {
+      goto bail_out;
+   }
+
+   if (!sd->fsend("run")) {
       goto bail_out;
    }
    /*
@@ -157,15 +169,6 @@ bool do_restore(JCR *jcr)
       goto bail_out;
    }
 
-   /*
-    * Send the bootstrap file -- what Volumes/files to restore
-    */
-   if (!send_bootstrap_file(jcr, fd) ||
-       !response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) {
-      goto bail_out;
-   }
-
-
    if (!send_runscripts_commands(jcr)) {
       goto bail_out;
    }
index 7694bd44d7b5a43b5646f4391752b0a8fcd0244f..926fed7ee9c6e09898b425b66d9c23ccd7d97f1f 100644 (file)
@@ -53,7 +53,9 @@ static char storaddr[]     = "storage address=%s port=%d ssl=0\n";
 /* Responses received from File daemon */
 static char OKverify[]    = "2000 OK verify\n";
 static char OKstore[]     = "2000 OK storage\n";
-static char OKbootstrap[] = "2000 OK bootstrap\n";
+
+/* Responses received from the Storage daemon */
+static char OKbootstrap[] = "3000 OK bootstrap\n";
 
 /* Forward referenced functions */
 static void prt_fname(JCR *jcr);
@@ -201,6 +203,7 @@ bool do_verify(JCR *jcr)
       edit_uint64(jcr->JobId, ed1), level_to_str(jcr->get_JobLevel()), jcr->Job);
 
    if (jcr->get_JobLevel() == L_VERIFY_VOLUME_TO_CATALOG) {
+      BSOCK *sd;
       /*
        * Start conversation with Storage daemon
        */
@@ -214,7 +217,15 @@ bool do_verify(JCR *jcr)
       if (!start_storage_daemon_job(jcr, jcr->rstorage, NULL)) {
          return false;
       }
-      if (!jcr->store_bsock->fsend("run")) {
+      sd = jcr->store_bsock;
+      /*
+       * Send the bootstrap file -- what Volumes/files to restore
+       */
+      if (!send_bootstrap_file(jcr, sd) ||
+          !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) {
+         goto bail_out;
+      }
+      if (!sd->fsend("run")) {
          return false;
       }
       /*
@@ -272,14 +283,6 @@ bool do_verify(JCR *jcr)
          goto bail_out;
       }
 
-      /*
-       * Send the bootstrap file -- what Volumes/files to restore
-       */
-      if (!send_bootstrap_file(jcr, fd) ||
-          !response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) {
-         goto bail_out;
-      }
-
       if (!jcr->RestoreBootstrap) {
          Jmsg0(jcr, M_FATAL, 0, _("Deprecated feature ... use bootstrap.\n"));
          goto bail_out;
index f227bbf5198befd4dbc7eab6b7abd935fb7531de..ddc3900096648df16f3b2f342c8465de766ed844 100644 (file)
@@ -183,7 +183,10 @@ public:
    bool is_job_canceled() {return job_canceled(this); };
    int32_t get_JobType() { return m_JobType; };
    int32_t get_JobLevel() { return m_JobLevel; };
-
+   bool no_client_used() { 
+      return (m_JobType == JT_MIGRATE || m_JobType == JT_COPY ||
+              m_JobLevel == L_VIRTUAL_FULL); 
+   };
    const char *get_OperationName();    /* in lib/jcr.c */
    const char *get_ActionName(bool past); /* in lib/jcr.c */
    void set_JobLevel(int32_t JobLevel); /* in lib/jcr.c */
@@ -399,7 +402,6 @@ 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 need_fd;                      /* set if we need FD connection */
 
    /* Parmaters for Open Read Session */
    BSR *bsr;                          /* Bootstrap record -- has everything */
index 47370524a1296ab52f3e7e06913d45cba8df1c5d..524b20762957b9715be98e8c98d7064f5bda1224 100644 (file)
@@ -938,10 +938,6 @@ static bool release_cmd(JCR *jcr)
 
 static bool bootstrap_cmd(JCR *jcr)
 {
-   /* If getting the bootstrap file succeeds, we do not need
-    *  the FD because we will be reading.
-    */
-   jcr->need_fd = false;
    return get_bootstrap_file(jcr, jcr->dir_bsock);
 }
 
index de9b2bb50cd4d1a11cf6a52d46ea44784b209c03..4bb402fc4edad28e74f1bebca8f42aa9e46d262c 100644 (file)
@@ -146,7 +146,6 @@ bool job_cmd(JCR *jcr)
    jcr->PreferMountedVols = PreferMountedVols;
 
    jcr->authenticated = false;
-   jcr->need_fd = true;
 
    /*
     * Pass back an authorization key for the File daemon
@@ -174,7 +173,7 @@ bool run_cmd(JCR *jcr)
    /* If we do not need the FD, we are doing a migrate, copy, or virtual
     *   backup.
     */
-   if (!jcr->need_fd) {
+   if (jcr->no_client_used()) {
       do_mac(jcr);
       return false;
    }
index 424a97e2c41dc6aea7531508624fa72c381de92f..975ad18264c46a0fbf0cfd5611b5ae6376243198 100644 (file)
@@ -3,6 +3,7 @@
 General:
 
 13Jul09
+kes  Send bootstrap directly from DIR to SD
 kes  Create build scripts for Win64 somewhat equilavent to the Win32 ones.
 10Jul09
 ebl  Print correct JobId in bls, should fix #1331
@@ -11,7 +12,6 @@ kes  Apply python detect patch from Bastian Friedrich <bastian.friedrich@collax.
 kes  Add --with-hostname to ./configure
 mvw  Changed ACL_OTHER into ACL_OTHER_OBJ as IRIX doesn't seem to have
      ACL_OTHER. Fixes bug #1333
-=======
 04Jul09
 mvw  Change checking for acl and xattr support from first file to
      job level.