X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fbscan.c;h=8f1c1faec41b8e6dd0cd48d01473854cda8e269d;hb=2499795e233e43bd4eb4d99e0473b67e6c6b60d8;hp=55c1fe13f3f068aea0f9c95ee9776ba382c16997;hpb=120259de1146b2005e15af6b8be94e3bc59c88a4;p=bacula%2Fbacula diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index 55c1fe13f3..8f1c1faec4 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -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; }