From: Kern Sibbald Date: Mon, 25 Jul 2005 11:59:03 +0000 (+0000) Subject: Apply Nicolas' bsr single block patch X-Git-Tag: Release-7.0.0~8578 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;ds=sidebyside;h=ff6c6afafa474727e57c2f5acaf40ba24061bfe2;p=bacula%2Fbacula Apply Nicolas' bsr single block patch git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@2253 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/bsr.c b/bacula/src/dird/bsr.c index 509a65b9eb..36c15553ae 100644 --- a/bacula/src/dird/bsr.c +++ b/bacula/src/dird/bsr.c @@ -2,8 +2,8 @@ * * Bacula Director -- Bootstrap Record routines. * - * BSR (bootstrap record) handling routines split from - * ua_restore.c July MMIII + * BSR (bootstrap record) handling routines split from + * ua_restore.c July MMIII * * Kern Sibbald, July MMII * @@ -64,23 +64,23 @@ static void free_findex(RBSR_FINDEX *fi) * for each Volume. */ static uint32_t write_findex(UAContext *ua, RBSR_FINDEX *fi, - int32_t FirstIndex, int32_t LastIndex, FILE *fd) + int32_t FirstIndex, int32_t LastIndex, FILE *fd) { uint32_t count = 0; for ( ; fi; fi=fi->next) { int32_t findex, findex2; if ((fi->findex >= FirstIndex && fi->findex <= LastIndex) || - (fi->findex2 >= FirstIndex && fi->findex2 <= LastIndex) || - (fi->findex < FirstIndex && fi->findex2 > LastIndex)) { - findex = fi->findex < FirstIndex ? FirstIndex : fi->findex; - findex2 = fi->findex2 > LastIndex ? LastIndex : fi->findex2; - if (findex == findex2) { + (fi->findex2 >= FirstIndex && fi->findex2 <= LastIndex) || + (fi->findex < FirstIndex && fi->findex2 > LastIndex)) { + findex = fi->findex < FirstIndex ? FirstIndex : fi->findex; + findex2 = fi->findex2 > LastIndex ? LastIndex : fi->findex2; + if (findex == findex2) { fprintf(fd, "FileIndex=%d\n", findex); - count++; - } else { + count++; + } else { fprintf(fd, "FileIndex=%d-%d\n", findex, findex2); - count += findex2 - findex + 1; - } + count += findex2 - findex + 1; + } } } return count; @@ -91,13 +91,13 @@ static uint32_t write_findex(UAContext *ua, RBSR_FINDEX *fi, * falls within the range of selected files in the bsr. */ static bool is_volume_selected(RBSR_FINDEX *fi, - int32_t FirstIndex, int32_t LastIndex) + int32_t FirstIndex, int32_t LastIndex) { for ( ; fi; fi=fi->next) { if ((fi->findex >= FirstIndex && fi->findex <= LastIndex) || - (fi->findex2 >= FirstIndex && fi->findex2 <= LastIndex) || - (fi->findex < FirstIndex && fi->findex2 > LastIndex)) { - return true; + (fi->findex2 >= FirstIndex && fi->findex2 <= LastIndex) || + (fi->findex < FirstIndex && fi->findex2 > LastIndex)) { + return true; } } return false; @@ -134,7 +134,7 @@ void free_bsr(RBSR *bsr) for ( ; bsr; bsr=next) { free_findex(bsr->fi); if (bsr->VolParams) { - free(bsr->VolParams); + free(bsr->VolParams); } next = bsr->next; free(bsr); @@ -153,18 +153,18 @@ bool complete_bsr(UAContext *ua, RBSR *bsr) jr.JobId = bsr->JobId; if (!db_get_job_record(ua->jcr, ua->db, &jr)) { bsendmsg(ua, _("Unable to get Job record. ERR=%s\n"), db_strerror(ua->db)); - return false; + return false; } bsr->VolSessionId = jr.VolSessionId; bsr->VolSessionTime = jr.VolSessionTime; if ((bsr->VolCount=db_get_job_volume_parameters(ua->jcr, ua->db, bsr->JobId, - &(bsr->VolParams))) == 0) { + &(bsr->VolParams))) == 0) { bsendmsg(ua, _("Unable to get Job Volume Parameters. ERR=%s\n"), db_strerror(ua->db)); - if (bsr->VolParams) { - free(bsr->VolParams); - bsr->VolParams = NULL; - } - return false; + if (bsr->VolParams) { + free(bsr->VolParams); + bsr->VolParams = NULL; + } + return false; } } return true; @@ -179,7 +179,7 @@ void make_unique_restore_filename(UAContext *ua, POOLMEM **fname) jcr->unlink_bsr = false; } else { Mmsg(fname, "%s/%s.restore.%s.bsr", working_directory, my_name, - jcr->Job); + jcr->Job); jcr->unlink_bsr = true; } } @@ -199,7 +199,7 @@ uint32_t write_bsr_file(UAContext *ua, RBSR *bsr) if (!fd) { berrno be; bsendmsg(ua, _("Unable to create bootstrap file %s. ERR=%s\n"), - fname, be.strerror()); + fname, be.strerror()); goto bail_out; } /* Write them to file */ @@ -222,9 +222,9 @@ uint32_t write_bsr_file(UAContext *ua, RBSR *bsr) start_prompt(ua, ""); for (RBSR *nbsr=bsr; nbsr; nbsr=nbsr->next) { for (int i=0; i < nbsr->VolCount; i++) { - if (nbsr->VolParams[i].VolumeName[0]) { - add_prompt(ua, nbsr->VolParams[i].VolumeName); - } + if (nbsr->VolParams[i].VolumeName[0]) { + add_prompt(ua, nbsr->VolParams[i].VolumeName); + } } } for (int i=0; i < ua->num_prompts; i++) { @@ -255,45 +255,45 @@ static uint32_t write_bsr(UAContext *ua, RBSR *bsr, FILE *fd) * VolCount is the number of JobMedia records. */ for (int i=0; i < bsr->VolCount; i++) { - if (!is_volume_selected(bsr->fi, bsr->VolParams[i].FirstIndex, - bsr->VolParams[i].LastIndex)) { - bsr->VolParams[i].VolumeName[0] = 0; /* zap VolumeName */ - continue; - } + if (!is_volume_selected(bsr->fi, bsr->VolParams[i].FirstIndex, + bsr->VolParams[i].LastIndex)) { + bsr->VolParams[i].VolumeName[0] = 0; /* zap VolumeName */ + continue; + } fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName); fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType); fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId); fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime); - if (bsr->VolParams[i].StartFile == bsr->VolParams[i].EndFile) { + if (bsr->VolParams[i].StartFile == bsr->VolParams[i].EndFile) { fprintf(fd, "VolFile=%u\n", bsr->VolParams[i].StartFile); - } else { + } else { fprintf(fd, "VolFile=%u-%u\n", bsr->VolParams[i].StartFile, - bsr->VolParams[i].EndFile); - } - if (bsr->VolParams[i].StartBlock == bsr->VolParams[i].EndBlock) { - fprintf(fd, "VolFile=%u\n", bsr->VolParams[i].StartBlock); - } else { + bsr->VolParams[i].EndFile); + } + if (bsr->VolParams[i].StartBlock == bsr->VolParams[i].EndBlock) { + fprintf(fd, "VolBlock=%u\n", bsr->VolParams[i].StartBlock); + } else { fprintf(fd, "VolBlock=%u-%u\n", bsr->VolParams[i].StartBlock, - bsr->VolParams[i].EndBlock); - } + bsr->VolParams[i].EndBlock); + } // Dmsg2(100, "bsr VolParam FI=%u LI=%u\n", -// bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex); +// bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex); - count = write_findex(ua, bsr->fi, bsr->VolParams[i].FirstIndex, - bsr->VolParams[i].LastIndex, fd); - if (count) { + count = write_findex(ua, bsr->fi, bsr->VolParams[i].FirstIndex, + bsr->VolParams[i].LastIndex, fd); + if (count) { fprintf(fd, "Count=%u\n", count); - } - total_count += count; - /* If the same file is present on two tapes or in two files - * on a tape, it is a continuation, and should not be treated - * twice in the totals. - */ - if (!first && LastIndex == bsr->VolParams[i].FirstIndex) { - total_count--; - } - first = false; - LastIndex = bsr->VolParams[i].LastIndex; + } + total_count += count; + /* If the same file is present on two tapes or in two files + * on a tape, it is a continuation, and should not be treated + * twice in the totals. + */ + if (!first && LastIndex == bsr->VolParams[i].FirstIndex) { + total_count--; + } + first = false; + LastIndex = bsr->VolParams[i].LastIndex; } } return total_count; @@ -308,10 +308,10 @@ void print_bsr(UAContext *ua, RBSR *bsr) bsendmsg(ua, "VolSessionId=%u\n", bsr->VolSessionId); bsendmsg(ua, "VolSessionTime=%u\n", bsr->VolSessionTime); bsendmsg(ua, "VolFile=%u-%u\n", bsr->VolParams[i].StartFile, - bsr->VolParams[i].EndFile); + bsr->VolParams[i].EndFile); bsendmsg(ua, "VolBlock=%u-%u\n", bsr->VolParams[i].StartBlock, - bsr->VolParams[i].EndBlock); - print_findex(ua, bsr->fi); + bsr->VolParams[i].EndBlock); + print_findex(ua, bsr->fi); } print_bsr(ua, bsr->next); } @@ -331,10 +331,10 @@ void add_findex(RBSR *bsr, uint32_t JobId, int32_t findex) RBSR_FINDEX *fi, *lfi; if (findex == 0) { - return; /* probably a dummy directory */ + return; /* probably a dummy directory */ } - if (bsr->fi == NULL) { /* if no FI add one */ + if (bsr->fi == NULL) { /* if no FI add one */ /* This is the first FileIndex item in the chain */ bsr->fi = new_findex(); bsr->JobId = JobId; @@ -345,22 +345,22 @@ void add_findex(RBSR *bsr, uint32_t JobId, int32_t findex) /* Walk down list of bsrs until we find the JobId */ if (bsr->JobId != JobId) { for (nbsr=bsr->next; nbsr; nbsr=nbsr->next) { - if (nbsr->JobId == JobId) { - bsr = nbsr; - break; - } + if (nbsr->JobId == JobId) { + bsr = nbsr; + break; + } } - if (!nbsr) { /* Must add new JobId */ - /* Add new JobId at end of chain */ - for (nbsr=bsr; nbsr->next; nbsr=nbsr->next) - { } - nbsr->next = new_bsr(); - nbsr->next->JobId = JobId; - nbsr->next->fi = new_findex(); - nbsr->next->fi->findex = findex; - nbsr->next->fi->findex2 = findex; - return; + if (!nbsr) { /* Must add new JobId */ + /* Add new JobId at end of chain */ + for (nbsr=bsr; nbsr->next; nbsr=nbsr->next) + { } + nbsr->next = new_bsr(); + nbsr->next->JobId = JobId; + nbsr->next->fi = new_findex(); + nbsr->next->fi->findex = findex; + nbsr->next->fi->findex2 = findex; + return; } } @@ -372,10 +372,10 @@ void add_findex(RBSR *bsr, uint32_t JobId, int32_t findex) /* Check if this findex is smaller than first item */ if (findex < fi->findex) { if ((findex+1) == fi->findex) { - fi->findex = findex; /* extend down */ - return; + fi->findex = findex; /* extend down */ + return; } - fi = new_findex(); /* yes, insert before first item */ + fi = new_findex(); /* yes, insert before first item */ fi->findex = findex; fi->findex2 = findex; fi->next = lfi; @@ -385,26 +385,26 @@ void add_findex(RBSR *bsr, uint32_t JobId, int32_t findex) /* Walk down fi chain and find where to insert insert new FileIndex */ for ( ; fi; fi=fi->next) { if (findex == (fi->findex2 + 1)) { /* extend up */ - RBSR_FINDEX *nfi; - fi->findex2 = findex; - /* - * If the following record contains one higher, merge its - * file index by extending it up. - */ - if (fi->next && ((findex+1) == fi->next->findex)) { - nfi = fi->next; - fi->findex2 = nfi->findex2; - fi->next = nfi->next; - free(nfi); - } - return; + RBSR_FINDEX *nfi; + fi->findex2 = findex; + /* + * If the following record contains one higher, merge its + * file index by extending it up. + */ + if (fi->next && ((findex+1) == fi->next->findex)) { + nfi = fi->next; + fi->findex2 = nfi->findex2; + fi->next = nfi->next; + free(nfi); + } + return; } if (findex < fi->findex) { /* add before */ - if ((findex+1) == fi->findex) { - fi->findex = findex; - return; - } - break; + if ((findex+1) == fi->findex) { + fi->findex = findex; + return; + } + break; } lfi = fi; } @@ -427,7 +427,7 @@ void add_findex_all(RBSR *bsr, uint32_t JobId) RBSR *nbsr; RBSR_FINDEX *fi; - if (bsr->fi == NULL) { /* if no FI add one */ + if (bsr->fi == NULL) { /* if no FI add one */ /* This is the first FileIndex item in the chain */ bsr->fi = new_findex(); bsr->JobId = JobId; @@ -438,22 +438,22 @@ void add_findex_all(RBSR *bsr, uint32_t JobId) /* Walk down list of bsrs until we find the JobId */ if (bsr->JobId != JobId) { for (nbsr=bsr->next; nbsr; nbsr=nbsr->next) { - if (nbsr->JobId == JobId) { - bsr = nbsr; - break; - } + if (nbsr->JobId == JobId) { + bsr = nbsr; + break; + } } - if (!nbsr) { /* Must add new JobId */ - /* Add new JobId at end of chain */ - for (nbsr=bsr; nbsr->next; nbsr=nbsr->next) - { } - nbsr->next = new_bsr(); - nbsr->next->JobId = JobId; - nbsr->next->fi = new_findex(); - nbsr->next->fi->findex = 1; - nbsr->next->fi->findex2 = INT32_MAX; - return; + if (!nbsr) { /* Must add new JobId */ + /* Add new JobId at end of chain */ + for (nbsr=bsr; nbsr->next; nbsr=nbsr->next) + { } + nbsr->next = new_bsr(); + nbsr->next->JobId = JobId; + nbsr->next->fi = new_findex(); + nbsr->next->fi->findex = 1; + nbsr->next->fi->findex2 = INT32_MAX; + return; } }