]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/catreq.c
Ensure that StorageId is updated after write
[bacula/bacula] / bacula / src / dird / catreq.c
index db195635deeb7a14bda673fbc4c5437f83ada8bc..e193bff46466b3e244bd7271dc99d558edf2cb7d 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2001-2010 Free Software Foundation Europe e.V.
+   Copyright (C) 2001-2012 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.
@@ -114,7 +114,6 @@ void catalog_request(JCR *jcr, BSOCK *bs)
    utime_t VolFirstWritten;
    utime_t VolLastWritten;
 
-   memset(&mr, 0, sizeof(mr));
    memset(&sdmr, 0, sizeof(sdmr));
    memset(&jm, 0, sizeof(jm));
    Dsm_check(100);      
@@ -141,7 +140,7 @@ void catalog_request(JCR *jcr, BSOCK *bs)
       ok = db_get_pool_record(jcr, jcr->db, &pr);
       if (ok) {
          mr.PoolId = pr.PoolId;
-         mr.StorageId = jcr->wstore->StorageId;
+         set_storageid_in_mr(jcr->wstore, &mr);
          mr.ScratchPoolId = pr.ScratchPoolId;
          ok = find_next_volume_for_append(jcr, &mr, index, fnv_create_vol, fnv_prune);
          Dmsg3(050, "find_media ok=%d idx=%d vol=%s\n", ok, index, mr.VolumeName);
@@ -201,7 +200,7 @@ void catalog_request(JCR *jcr, BSOCK *bs)
             send_volume_info_to_storage_daemon(jcr, bs, &mr);
          } else {
             /* Not suitable volume */
-            bs->fsend(_("1998 Volume \"%s\" status is %s, %s.\n"), mr.VolumeName,
+            bs->fsend(_("1998 Volume \"%s\" catalog status is %s, %s.\n"), mr.VolumeName,
                mr.VolStatus, reason);
          }
 
@@ -281,14 +280,14 @@ void catalog_request(JCR *jcr, BSOCK *bs)
        *   However, do so only if we are writing the tape, i.e.
        *   the number of VolWrites has increased.
        */
-      if (jcr->wstore && jcr->wstore->StorageId && sdmr.VolWrites > mr.VolWrites) {
+      if (jcr->wstore && sdmr.VolWrites > mr.VolWrites) {
          Dmsg2(050, "Update StorageId old=%d new=%d\n",
                mr.StorageId, jcr->wstore->StorageId);
-         if (jcr->wstore->StorageId == 0) {
-            Jmsg(jcr, M_ERROR, 0, _("Attempt to set StorageId to zero.\n"));
-         } else {
-            mr.StorageId = jcr->wstore->StorageId;
-         }
+         /* Update StorageId after write */
+         set_storageid_in_mr(jcr->wstore, &mr);
+      } else {
+         /* Nothing written, reset same StorageId */
+         set_storageid_in_mr(NULL, &mr);
       }
 
       /* Copy updated values to original media record */
@@ -357,6 +356,7 @@ void catalog_request(JCR *jcr, BSOCK *bs)
       Jmsg1(jcr, M_FATAL, 0, _("Invalid Catalog request: %s"), omsg);
       free_memory(omsg);
    }
+
    Dmsg1(400, ">CatReq response: %s", bs->msg);
    Dmsg1(400, "Leave catreq jcr 0x%x\n", jcr);
    return;
@@ -465,7 +465,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
           * Older FDs don't have a delta sequence, so check if it is there 
           */
          if (p - jcr->attr < msglen) {
-            ar->DeltaSeq = str_to_int32(p);
+            ar->DeltaSeq = str_to_int32(p); /* delta_seq */
          }
       }
 
@@ -634,8 +634,7 @@ bool despool_attributes_from_file(JCR *jcr, const char *file)
    bool ret=false;
    int32_t pktsiz;
    size_t nbytes;
-   ssize_t last = 0, size = 0;
-   int count = 0;
+   ssize_t size = 0;
    int32_t msglen;                    /* message length */
    POOLMEM *msg = get_pool_memory(PM_MESSAGE);
    FILE *spool_fd=NULL;
@@ -673,9 +672,6 @@ bool despool_attributes_from_file(JCR *jcr, const char *file)
             goto bail_out;
          }
          size += nbytes;
-         if ((++count & 0x3F) == 0) {
-            last = size;
-         }
       }
       if (!jcr->is_job_canceled()) {
          update_attribute(jcr, msg, msglen);