From: Kern Sibbald Date: Mon, 17 Sep 2007 15:25:41 +0000 (+0000) Subject: kes Modify new volume algorithm to use max MediaId for generating next X-Git-Tag: Release-7.0.0~5661 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5c52ce90fdb0ddf150fd55238f858b2549c845f0;p=bacula%2Fbacula kes Modify new volume algorithm to use max MediaId for generating next volume number rather than the count of Volumes. This should essentially eliminate the failure rate if some volumes were deleted. Bug #921. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5584 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/newvol.c b/bacula/src/dird/newvol.c index 2a345ce8d3..c66b813325 100644 --- a/bacula/src/dird/newvol.c +++ b/bacula/src/dird/newvol.c @@ -1,21 +1,7 @@ -/* - * - * Bacula Director -- newvol.c -- creates new Volumes in - * catalog Media table from the LabelFormat specification. - * - * Kern Sibbald, May MMI - * - * This routine runs as a thread and must be thread reentrant. - * - * Basic tasks done here: - * If possible create a new Media entry - * - * Version $Id$ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2007 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. @@ -39,6 +25,20 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * + * Bacula Director -- newvol.c -- creates new Volumes in + * catalog Media table from the LabelFormat specification. + * + * Kern Sibbald, May MMI + * + * This routine runs as a thread and must be thread reentrant. + * + * Basic tasks done here: + * If possible create a new Media entry + * + * Version $Id$ + */ #include "bacula.h" #include "dird.h" @@ -116,11 +116,21 @@ static bool create_simple_name(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr) { char name[MAXSTRING]; char num[20]; + db_int64_ctx ctx; + POOL_MEM query(PM_MESSAGE); + char ed1[50]; /* See if volume already exists */ mr->VolumeName[0] = 0; bstrncpy(name, pr->LabelFormat, sizeof(name)); - for (int i=pr->NumVols+1; i<(int)pr->NumVols+100; i++) { + ctx.value = 0; + Mmsg(query, "SELECT MAX(MediaId) FROM Media,POOL WHERE Pool.PoolId=%s", + edit_int64(pr->PoolId, ed1)); + if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) { + Jmsg(jcr, M_WARNING, 0, _("SQL failed, but ignored. ERR=%s\n"), db_strerror(jcr->db)); + ctx.value = pr->NumVols+1; + } + for (int i=(int)ctx.value+1; i<(int)ctx.value+100; i++) { MEDIA_DBR tmr; memset(&tmr, 0, sizeof(tmr)); sprintf(num, "%04d", i); diff --git a/bacula/technotes-2.3 b/bacula/technotes-2.3 index 6786ae3a10..3055db2b96 100644 --- a/bacula/technotes-2.3 +++ b/bacula/technotes-2.3 @@ -2,15 +2,18 @@ General: 17Sep07 +kes Modify new volume algorithm to use max MediaId for generating next + volume number rather than the count of Volumes. This should essentially + eliminate the failure rate if some volumes were deleted. Bug #921. kes Begin implemention of Optimize Job Scheduling. kes Implement restore callback that Dirk and I agreed on for bat - restore. This fixes bug #928. + restore. This fixes bug #928. Restore of backup of zero files fails. kes Fix SQL Catalog logging which broke with new db_escape_string calling sequence. 14Sep07 kes Fix bacula_cats.def for new db_escape_string(). kes Increase size of name string when FD making connection to SD. - May fix bug #953. + May fix bug #953. FD->SD connection failure. 13Sep07 kes Add code to help Dan debug 2drive-incremental-2disk test. kes Add code to try to fix bug #908.