]> git.sur5r.net Git - bacula/bacula/commitdiff
Correct creation/update of Pool/Media records for new fields
authorKern Sibbald <kern@sibbald.com>
Tue, 24 Dec 2002 17:38:51 +0000 (17:38 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 24 Dec 2002 17:38:51 +0000 (17:38 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@246 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/kernstodo
bacula/src/cats/sql_create.c
bacula/src/cats/sql_find.c
bacula/src/cats/sql_update.c
bacula/src/dird/ua_cmds.c
bacula/src/version.h

index c31fcbd8f6637eecfa6c4f89bee4d8ec677e474b..15751d9f335399823cc45dfe9d56b1945ff9c087 100644 (file)
@@ -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.
index dd7e5adc57ee1e67aa71137ff7c42865cbe9618f..b4337c93dacf3f8e16219a03e707ea7f70c44c65 100644 (file)
@@ -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);
 
index b0dc4277f4bab372ec96229f590e665e807a17b9..7f333f4f48520ab7e5dce4430d150fc5f4c51343 100644 (file)
@@ -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);
index db8960212b024a7670d7ec4a5c933135df611477..cc76d0675194ce13c71abd887dfbdc09e3d4fe2c 100644 (file)
@@ -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);
index a47d2a85744b032c2fc6a12db4783a63778ea6a8..f19e21ff062c9c88bf2dedd77e7557a2f2dfa806 100644 (file)
@@ -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);
index 4b154e43a6b43fa1e67f731754e9b8a36f343613..2137ad41a64a53176933e296dba92e032973bac6 100644 (file)
@@ -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