]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/bscan.c
First stab at a simple script to dump the content of the complete Ingres bacula datab...
[bacula/bacula] / bacula / src / stored / bscan.c
index 55c1fe13f3f068aea0f9c95ee9776ba382c16997..8f1c1faec41b8e6dd0cd48d01473854cda8e269d 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2001-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2001-2010 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.
@@ -33,8 +33,6 @@
  *
  *   Kern E. Sibbald, December 2001
  *
- *
- *   Version $Id$
  */
 
 #include "bacula.h"
@@ -333,7 +331,7 @@ static bool bscan_mount_next_read_volume(DCR *dcr)
 {
    DEVICE *dev = dcr->dev;
    DCR *mdcr;
-   Dmsg1(100, "Walk attached jcrs. Volume=%s\n", dev->VolCatInfo.VolCatName);
+   Dmsg1(100, "Walk attached jcrs. Volume=%s\n", dev->getVolCatName());
    foreach_dlist(mdcr, dev->attached_dcrs) {
       JCR *mjcr = mdcr->jcr;
       Dmsg1(000, "========== JobId=%u ========\n", mjcr->JobId);
@@ -351,7 +349,7 @@ static bool bscan_mount_next_read_volume(DCR *dcr)
       mjcr->read_dcr->VolLastIndex = dcr->VolLastIndex;
       if (!create_jobmedia_record(db, mjcr)) {
          Pmsg2(000, _("Could not create JobMedia record for Volume=%s Job=%s\n"),
-            dev->VolCatInfo.VolCatName, mjcr->Job);
+            dev->getVolCatName(), mjcr->Job);
       }
    }
 
@@ -529,9 +527,9 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
             }
          }
          /* Create Client record if not already there */
-            bstrncpy(cr.Name, label.ClientName, sizeof(cr.Name));
-            create_client_record(db, &cr);
-            jr.ClientId = cr.ClientId;
+         bstrncpy(cr.Name, label.ClientName, sizeof(cr.Name));
+         create_client_record(db, &cr);
+         jr.ClientId = cr.ClientId;
 
          /* process label, if Job record exists don't update db */
          mjcr = create_job_record(db, &jr, &label, rec);
@@ -664,15 +662,10 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
    case STREAM_UNIX_ATTRIBUTES:
    case STREAM_UNIX_ATTRIBUTES_EX:
 
-      if (!unpack_attributes_record(bjcr, rec->Stream, rec->data, attr)) {
+      if (!unpack_attributes_record(bjcr, rec->Stream, rec->data, rec->data_len, attr)) {
          Emsg0(M_ERROR_TERM, 0, _("Cannot continue.\n"));
       }
 
-      if (attr->file_index != rec->FileIndex) {
-         Emsg2(M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"),
-            rec->FileIndex, attr->file_index);
-      }
-
       if (verbose > 1) {
          decode_stat(attr->attr, &attr->statp, &attr->LinkFI);
          build_attr_output_fnames(bjcr, attr);
@@ -694,6 +687,11 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
       free_jcr(mjcr);
       break;
 
+   case STREAM_RESTORE_OBJECT:
+   /* ****FIXME*****/
+      /* Implement putting into catalog */
+      break;
+
    /* Data stream */
    case STREAM_WIN32_DATA:
    case STREAM_FILE_DATA:
@@ -914,6 +912,7 @@ static int create_media_record(B_DB *db, MEDIA_DBR *mr, VOLUME_LABEL *vl)
    mr->VolRetention = 365 * 3600 * 24; /* 1 year */
    mr->Enabled = 1;
    if (vl->VerNum >= 11) {
+      mr->set_first_written = true; /* Save FirstWritten during update_media */
       mr->FirstWritten = btime_to_utime(vl->write_btime);
       mr->LabelDate    = btime_to_utime(vl->label_btime);
    } else {
@@ -1139,6 +1138,9 @@ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel,
    jr->JobStatus = elabel->JobStatus;
    mjcr->JobStatus = elabel->JobStatus;
    jr->JobFiles = elabel->JobFiles;
+   if (jr->JobFiles > 0) {  /* If we found files, force PurgedFiles */
+      jr->PurgedFiles = 0;
+   }
    jr->JobBytes = elabel->JobBytes;
    jr->VolSessionId = rec->VolSessionId;
    jr->VolSessionTime = rec->VolSessionTime;
@@ -1157,7 +1159,7 @@ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel,
    }
    if (verbose) {
       Pmsg3(000, _("Updated Job termination record for JobId=%u Level=%s TermStat=%c\n"), 
-         jr->JobId, job_level_to_str(mjcr->get_JobLevel()), jr->JobStatus);
+         jr->JobId, job_level_to_str(mjcr->getJobLevel()), jr->JobStatus);
    }
    if (verbose > 1) {
       const char *term_msg;
@@ -1204,7 +1206,7 @@ static int update_job_record(B_DB *db, JOB_DBR *jr, SESSION_LABEL *elabel,
         mjcr->JobId,
         mjcr->Job,
         mjcr->fileset_name,
-        job_level_to_str(mjcr->get_JobLevel()),
+        job_level_to_str(mjcr->getJobLevel()),
         mjcr->client_name,
         sdt,
         edt,
@@ -1340,8 +1342,8 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/)
 bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw  writing)
 {
    Dmsg0(100, "Fake dir_get_volume_info\n");
-   bstrncpy(dcr->VolCatInfo.VolCatName, dcr->VolumeName, sizeof(dcr->VolCatInfo.VolCatName));
+   dcr->setVolCatName(dcr->VolumeName);
    dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr);
-   Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->VolCatInfo.VolCatName, dcr->VolCatInfo.VolCatParts);
+   Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->getVolCatName(), dcr->VolCatInfo.VolCatParts);
    return 1;
 }