From: Kern Sibbald Date: Tue, 24 Dec 2002 17:38:51 +0000 (+0000) Subject: Correct creation/update of Pool/Media records for new fields X-Git-Tag: Release-1.28~20 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6aae439e9ab7cd9b6c1b11b6d4940d1b6f8cfd53;p=bacula%2Fbacula Correct creation/update of Pool/Media records for new fields git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@246 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/kernstodo b/bacula/kernstodo index c31fcbd8f6..15751d9f33 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -1,5 +1,5 @@ Kern's ToDo List - 16 December 2002 + 22 December 2002 Documentation to do: (a little bit at a time) - Document running a test version. diff --git a/bacula/src/cats/sql_create.c b/bacula/src/cats/sql_create.c index dd7e5adc57..b4337c93da 100644 --- a/bacula/src/cats/sql_create.c +++ b/bacula/src/cats/sql_create.c @@ -223,7 +223,7 @@ int db_create_media_record(B_DB *mdb, MEDIA_DBR *mr) { int stat; - char ed1[30], ed2[30], ed3[30]; + char ed1[30], ed2[30], ed3[30], ed4[30]; db_lock(mdb); Mmsg(&mdb->cmd, "SELECT MediaId FROM Media WHERE VolumeName='%s'", @@ -243,14 +243,16 @@ db_create_media_record(B_DB *mdb, MEDIA_DBR *mr) /* Must create it */ Mmsg(&mdb->cmd, -"INSERT INTO Media (VolumeName,MediaType,PoolId,MaxVolBytes,VolCapacityBytes, \ -Recycle,VolRetention,VolStatus,Slot) VALUES ('%s','%s',%u,%s,%s,%d,%s,'%s',%d)", +"INSERT INTO Media (VolumeName,MediaType,PoolId,MaxVolBytes,VolCapacityBytes," +"Recycle,VolRetention,VolUseDuration,VolStatus,Slot) " +"VALUES ('%s','%s',%u,%s,%s,%d,%s,%s,'%s',%d)", mr->VolumeName, mr->MediaType, mr->PoolId, edit_uint64(mr->MaxVolBytes,ed1), edit_uint64(mr->VolCapacityBytes, ed2), mr->Recycle, edit_uint64(mr->VolRetention, ed3), + edit_uint64(mr->VolUseDuration, ed4), mr->VolStatus, mr->Slot); diff --git a/bacula/src/cats/sql_find.c b/bacula/src/cats/sql_find.c index b0dc4277f4..7f333f4f48 100644 --- a/bacula/src/cats/sql_find.c +++ b/bacula/src/cats/sql_find.c @@ -53,8 +53,8 @@ extern void print_result(B_DB *mdb); extern int QueryDB(char *file, int line, B_DB *db, char *select_cmd); - -/* Find job start time. Used to find last full save +/* + * Find job start time. Used to find last full save * for Incremental and Differential saves. * * Returns: 0 on failure @@ -73,16 +73,16 @@ db_find_job_start_time(B_DB *mdb, JOB_DBR *jr, POOLMEM **stime) /* Differential is since last Full backup */ if (jr->Level == L_DIFFERENTIAL) { Mmsg(&mdb->cmd, -"SELECT JobId from Job WHERE JobStatus='T' and Type='%c' and \ -Level='%c' and Name='%s' and ClientId=%d and FileSetId=%d \ -ORDER by StartTime DESC LIMIT 1", +"SELECT JobId FROM Job WHERE JobStatus='T' AND Type='%c' AND \ +Level='%c' AND Name='%s' AND ClientId=%d AND FileSetId=%d \ +ORDER BY StartTime DESC LIMIT 1", jr->Type, L_FULL, jr->Name, jr->ClientId, jr->FileSetId); /* Incremental is since last Full, Incremental, or Differential */ } else if (jr->Level == L_INCREMENTAL) { Mmsg(&mdb->cmd, -"SELECT JobId from Job WHERE JobStatus='T' and Type='%c' and \ -(Level='%c' or Level='%c' or Level='%c') and Name='%s' and ClientId=%d \ -ORDER by StartTime DESC LIMIT 1", +"SELECT JobId FROM Job WHERE JobStatus='T' AND Type='%c' AND \ +Level IN ('%c','%c','%c') AND Name='%s' AND ClientId=%d \ +ORDER BY StartTime DESC LIMIT 1", jr->Type, L_INCREMENTAL, L_DIFFERENTIAL, L_FULL, jr->Name, jr->ClientId); } else { @@ -108,7 +108,7 @@ ORDER by StartTime DESC LIMIT 1", } Dmsg1(100, "Submitting: %s\n", mdb->cmd); - Mmsg(&mdb->cmd, "SELECT StartTime from Job WHERE Job.JobId=%d", JobId); + Mmsg(&mdb->cmd, "SELECT StartTime FROM Job WHERE Job.JobId=%d", JobId); if (!QUERY_DB(mdb, mdb->cmd)) { Mmsg1(&mdb->errmsg, _("Query error for start time request: %s\n"), mdb->cmd); diff --git a/bacula/src/cats/sql_update.c b/bacula/src/cats/sql_update.c index db8960212b..cc76d06751 100644 --- a/bacula/src/cats/sql_update.c +++ b/bacula/src/cats/sql_update.c @@ -153,14 +153,20 @@ int db_update_pool_record(B_DB *mdb, POOL_DBR *pr) { int stat; - char ed1[50]; + char ed1[50], ed2[50], ed3[50]; db_lock(mdb); Mmsg(&mdb->cmd, -"UPDATE Pool SET NumVols=%d, MaxVols=%d, UseOnce=%d, UseCatalog=%d, \ -AcceptAnyVolume=%d, VolRetention='%s',LabelFormat='%s' WHERE PoolId=%u", +"UPDATE Pool SET NumVols=%d,MaxVols=%d,UseOnce=%d,UseCatalog=%d," +"AcceptAnyVolume=%d,VolRetention='%s',VolUseDuration='%s'," +"MaxVolJobs=%u,MaxVolFiles=%u,MaxVolBytes=%s,Recycle=%d," +"AutoPrune=%d,LabelFormat='%s' WHERE PoolId=%u", pr->NumVols, pr->MaxVols, pr->UseOnce, pr->UseCatalog, pr->AcceptAnyVolume, edit_uint64(pr->VolRetention, ed1), + edit_uint64(pr->VolUseDuration, ed2), + pr->MaxVolJobs, pr->MaxVolFiles, + edit_uint64(pr->MaxVolBytes, ed3), + pr->Recycle, pr->AutoPrune, pr->LabelFormat, pr->PoolId); stat = UPDATE_DB(mdb, mdb->cmd); diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index a47d2a8574..f19e21ff06 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -133,6 +133,23 @@ int do_a_command(UAContext *ua, char *cmd) return stat; } +/* + * This is a common routine used to stuff the Pool DB record defaults + * into the Media DB record just before creating a media (Volume) + * record. + */ +static void set_pool_dbr_defaults_in_media_dbr(MEDIA_DBR *mr, POOL_DBR *pr) +{ + mr->PoolId = pr->PoolId; + strcpy(mr->VolStatus, "Append"); + mr->Recycle = pr->Recycle; + mr->VolRetention = pr->VolRetention; + mr->VolUseDuration = pr->VolUseDuration; + mr->MaxVolJobs = pr->MaxVolJobs; + mr->MaxVolFiles = pr->MaxVolFiles; + mr->MaxVolBytes = pr->MaxVolBytes; +} + /* * Add Volumes to an existing Pool @@ -258,14 +275,7 @@ getVolName: slot = atoi(ua->cmd); } - mr.PoolId = pr.PoolId; - strcpy(mr.VolStatus, "Append"); - mr.Recycle = pr.Recycle; - mr.VolRetention = pr.VolRetention; - mr.VolUseDuration = pr.VolUseDuration; - mr.MaxVolJobs = pr.MaxVolJobs; - mr.MaxVolFiles = pr.MaxVolFiles; - mr.MaxVolBytes = pr.MaxVolBytes; + set_pool_dbr_defaults_in_media_dbr(&mr, &pr); for (i=startnum; i < num+startnum; i++) { sprintf(mr.VolumeName, name, i); mr.Slot = slot++; @@ -450,6 +460,44 @@ static int cancelcmd(UAContext *ua, char *cmd) return 1; } +/* + * This is a common routine to create or update a + * Pool DB base record from a Pool Resource. We handle + * the setting of MaxVols and NumVols slightly differently + * depending on if we are creating the Pool or we are + * simply bringing it into agreement with the resource (updage). + */ +void set_pooldbr_from_poolres(POOL_DBR *pr, POOL *pool, int create) +{ + strcpy(pr->PoolType, pool->pool_type); + if (create) { + pr->MaxVols = pool->max_volumes; + pr->NumVols = 0; + } else { /* update pool */ + if (pr->MaxVols != pool->max_volumes) { + pr->MaxVols = pool->max_volumes; + } + if (pr->MaxVols != 0 && pr->MaxVols < pr->NumVols) { + pr->MaxVols = pr->NumVols; + } + } + pr->UseOnce = pool->use_volume_once; + pr->UseCatalog = pool->use_catalog; + pr->AcceptAnyVolume = pool->accept_any_volume; + pr->Recycle = pool->Recycle; + pr->VolRetention = pool->VolRetention; + pr->VolUseDuration = pool->VolUseDuration; + pr->MaxVolJobs = pool->MaxVolJobs; + pr->MaxVolFiles = pool->MaxVolFiles; + pr->MaxVolBytes = pool->MaxVolBytes; + if (pool->label_format) { + strcpy(pr->LabelFormat, pool->label_format); + } else { + strcpy(pr->LabelFormat, "*"); /* none */ + } +} + + /* * Create a pool record from a given Pool resource * Also called from backup.c @@ -470,24 +518,7 @@ int create_pool(B_DB *db, POOL *pool) return 0; /* exists */ } - strcpy(pr.PoolType, pool->pool_type); - pr.MaxVols = pool->max_volumes; - pr.NumVols = 0; - pr.UseOnce = pool->use_volume_once; - pr.UseCatalog = pool->use_catalog; - pr.AcceptAnyVolume = pool->accept_any_volume; - pr.Recycle = pool->Recycle; - pr.VolRetention = pool->VolRetention; - pr.VolUseDuration = pool->VolUseDuration; - pr.MaxVolJobs = pool->MaxVolJobs; - pr.MaxVolFiles = pool->MaxVolFiles; - pr.MaxVolBytes = pool->MaxVolBytes; - pr.AutoPrune = pool->AutoPrune; - if (pool->label_format) { - strcpy(pr.LabelFormat, pool->label_format); - } else { - strcpy(pr.LabelFormat, "*"); /* none */ - } + set_pooldbr_from_poolres(&pr, pool, 1); if (!db_create_pool_record(db, &pr)) { return -1; /* error */ @@ -839,28 +870,9 @@ static int update_pool(UAContext *ua) if (!get_pool_dbr(ua, &pr)) { return 0; } - strcpy(pr.PoolType, pool->pool_type); - if (pr.MaxVols != pool->max_volumes) { - pr.MaxVols = pool->max_volumes; - } - if (pr.MaxVols != 0 && pr.MaxVols < pr.NumVols) { - pr.MaxVols = pr.NumVols; - } - pr.UseOnce = pool->use_volume_once; - pr.UseCatalog = pool->use_catalog; - pr.AcceptAnyVolume = pool->accept_any_volume; - pr.Recycle = pool->Recycle; - pr.VolRetention = pool->VolRetention; - pr.VolUseDuration = pool->VolUseDuration; - pr.MaxVolJobs = pool->MaxVolJobs; - pr.MaxVolFiles = pool->MaxVolFiles; - pr.MaxVolBytes = pool->MaxVolBytes; - if (pool->label_format) { - strcpy(pr.LabelFormat, pool->label_format); - } else { - strcpy(pr.LabelFormat, "*"); /* none */ - } + set_pooldbr_from_poolres(&pr, pool, 0); /* update */ + id = db_update_pool_record(ua->db, &pr); if (id <= 0) { bsendmsg(ua, _("db_update_pool_record returned %d. ERR=%s\n"), @@ -1265,10 +1277,6 @@ gotVol: if (!select_pool_dbr(ua, &pr)) { return 1; } - mr.PoolId = pr.PoolId; - strcpy(mr.VolStatus, "Append"); - mr.Recycle = pr.Recycle; - mr.VolRetention = pr.VolRetention; ua->jcr->store = store; bsendmsg(ua, _("Connecting to Storage daemon %s at %s:%d ...\n"), @@ -1298,12 +1306,7 @@ gotVol: unbash_spaces(mr.MediaType); unbash_spaces(pr.Name); if (ok) { - mr.Recycle = pr.Recycle; - mr.VolRetention = pr.VolRetention; - mr.VolUseDuration = pr.VolUseDuration; - mr.MaxVolJobs = pr.MaxVolJobs; - mr.MaxVolFiles = pr.MaxVolFiles; - mr.MaxVolBytes = pr.MaxVolBytes; + set_pool_dbr_defaults_in_media_dbr(&mr, &pr); if (db_create_media_record(ua->db, &mr)) { bsendmsg(ua, _("Media record for Volume=%s successfully created.\n"), mr.VolumeName); diff --git a/bacula/src/version.h b/bacula/src/version.h index 4b154e43a6..2137ad41a6 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,8 +1,8 @@ /* */ #define VERSION "1.28" #define VSTRING "1" -#define DATE "20 December 2002" -#define LSMDATE "20Dec02" +#define DATE "24 December 2002" +#define LSMDATE "24Dec02" /* Debug flags */ #define DEBUG 1