]> git.sur5r.net Git - bacula/bacula/commitdiff
Write MaxVolJobs and VolUseDuration to DB
authorKern Sibbald <kern@sibbald.com>
Mon, 18 Nov 2002 11:37:18 +0000 (11:37 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 18 Nov 2002 11:37:18 +0000 (11:37 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@199 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/Makefile.in
bacula/kernstodo
bacula/src/cats/cats.h
bacula/src/cats/sql_create.c
bacula/src/cats/sql_get.c
bacula/src/dird/catreq.c
bacula/src/dird/dird_conf.c
bacula/src/dird/dird_conf.h
bacula/src/dird/ua_cmds.c
bacula/src/version.h

index 48467ac4689072208de444334d740d4472ab2058..86aaedf97f068a8e808e8c13dae70f57774af792 100755 (executable)
@@ -109,9 +109,6 @@ Makefiles:
        (cd scripts; \
           chmod 755 startmysql stopmysql bacula fd startit stopit btraceback; \
           chmod 755 mtx-changer console gconsole)
-       chmod 755 src/console/btraceback src/lib/btraceback            
-       chmod 755 src/dird/btraceback src/filed/btraceback
-       chmod 755 src/stored/btraceback
        chmod 755 src/cats/make_mysql_tables src/cats/drop_mysql_tables
        chmod 755 src/cats/make_sqlite_tables src/cats/drop_sqlite_tables
        chmod 755 src/cats/make_bdb_tables src/cats/drop_bdb_tables
index 37b51350f47bcfe31ff5ba1c5806669f087fead9..f91896693ccad97585386956d24059b718a702ed 100644 (file)
@@ -1,7 +1,7 @@
                  Kern's ToDo List
-                 14 November 2002
+                 18 November 2002
 
-To do:    
+Documentation to do:
 - Document to have patience when SD first starts.
 - Document running a test version.
 - Document saving MySQL databases, where to find code for shutting 
@@ -9,15 +9,17 @@ To do:
   http://www.backupcentral.com/free-backup-software1.html
 - Document -i option on FD
 
-Test:
+Testing to do:
 - that restore options work in FD.
 - that mod of restore options works.
 - that console command line options work
 - blocksize recognition code.
+- make sure that update of volume new parameters works
 
 For 1.27 release:
-- Add ORDER BY JobId to list of Jobs in query.sql, and in
-  ua_list.c (list command).
+- drive MaxVolJobs, VolUseDuration from media record
+  rather than Resource.
+
 
 After 1.27
 - Check if both CatalogFiles and UseCatalog are set to SD.
@@ -597,3 +599,5 @@ Done: (see kernsdone for more)
 - Make sure pruning of Jobs removes JobMediaId
 - Write bcopy program -- recovery of bad tape.
 - Make gethostbyname() thread safe in bnet.c
+- Add ORDER BY JobId to list of Jobs in query.sql, and in
+  ua_output.c (list command).
index 169513e89aa5ab1a03b51b31e7ca6448aeecae54..6fd62190b5727720e4ea29b33829918aee25d076 100644 (file)
@@ -358,7 +358,9 @@ typedef struct {
    int AcceptAnyVolume;               /* set to accept any volume sequence */
    int AutoPrune;                     /* set to prune automatically */
    int Recycle;                       /* default Vol recycle flag */
-   utime_t VolRetention;              /* retention period in seconds */
+   utime_t  VolRetention;             /* retention period in seconds */
+   utime_t  VolUseDuration;           /* time in secs volume can be used */
+   uint32_t MaxVolJobs;               /* Max jobs on volume */
    char PoolType[MAX_NAME_LENGTH];             
    char LabelFormat[MAX_NAME_LENGTH];
    /* Extra stuff not in DB */
@@ -385,6 +387,8 @@ typedef struct {
    uint64_t VolMaxBytes;              /* max bytes to write */
    uint64_t VolCapacityBytes;         /* capacity estimate */
    utime_t  VolRetention;             /* Volume retention in seconds */
+   utime_t  VolUseDuration;           /* time in secs volume can be used */
+   uint32_t MaxVolJobs;               /* Max jobs on volume */
    int      Recycle;                  /* recycle yes/no */
    int32_t  Slot;                     /* slot in changer */
    char VolStatus[20];                /* Volume status */
index cc7c9df05d77a5c85e116091645d3fb95c78d4bb..f79e7158af4e6bfa60c18d5ac4f29bc72f1eb6a3 100644 (file)
@@ -162,7 +162,7 @@ int
 db_create_pool_record(B_DB *mdb, POOL_DBR *pr)
 {
    int stat;
-   char ed1[30];
+   char ed1[30], ed2[30];
 
    db_lock(mdb);
    Mmsg(&mdb->cmd, "SELECT PoolId,Name FROM Pool WHERE Name='%s'", pr->Name);
@@ -183,15 +183,18 @@ db_create_pool_record(B_DB *mdb, POOL_DBR *pr)
 
    /* Must create it */
    Mmsg(&mdb->cmd, 
-"INSERT INTO Pool (Name, NumVols, MaxVols, UseOnce, UseCatalog, \
-AcceptAnyVolume, AutoPrune, Recycle, VolRetention, PoolType, LabelFormat) \
-VALUES ('%s', %d, %d, %d, %d, %d, %d, %d, %s, '%s', '%s')", 
+"INSERT INTO Pool (Name,NumVols,MaxVols,UseOnce,UseCatalog,\
+AcceptAnyVolume,AutoPrune,Recycle,VolRetention,VolUseDuration,\
+MaxVolJobs,PoolType,LabelFormat) \
+VALUES ('%s',%u,%u,%d,%d,%d,%d,%d,%s,%s,%u,'%s','%s')", 
                  pr->Name,
                  pr->NumVols, pr->MaxVols,
                  pr->UseOnce, pr->UseCatalog,
                  pr->AcceptAnyVolume,
                  pr->AutoPrune, pr->Recycle,
                  edit_uint64(pr->VolRetention, ed1),
+                 edit_uint64(pr->VolUseDuration, ed2),
+                 pr->MaxVolJobs,
                  pr->PoolType, pr->LabelFormat);
    Dmsg1(500, "Create Pool: %s\n", mdb->cmd);
    if (!INSERT_DB(mdb, mdb->cmd)) {
index da60768593cf6907decaf34dc02bd5692a54f754..3f7bd2e9dde8cdded9e3a2169c155804ae8032f4 100644 (file)
@@ -486,9 +486,9 @@ AutoPrune, Recycle, VolRetention, \
 PoolType, LabelFormat FROM Pool WHERE Pool.PoolId=%d", pdbr->PoolId);
    } else {                          /* find by name */
       Mmsg(&mdb->cmd, 
-"SELECT PoolId, Name, NumVols, MaxVols, UseOnce, UseCatalog, AcceptAnyVolume, \
-AutoPrune, Recycle, VolRetention, \
-PoolType, LabelFormat FROM Pool WHERE Pool.Name='%s'", pdbr->Name);
+"SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,AcceptAnyVolume,\
+AutoPrune,Recycle,VolRetention,VolUseDuration,MaxVolJobs,\
+PoolType,LabelFormat FROM Pool WHERE Pool.Name='%s'", pdbr->Name);
    }  
 
    if (QUERY_DB(mdb, mdb->cmd)) {
@@ -513,9 +513,11 @@ PoolType, LabelFormat FROM Pool WHERE Pool.Name='%s'", pdbr->Name);
            pdbr->AutoPrune = atoi(row[7]);
            pdbr->Recycle = atoi(row[8]);
            pdbr->VolRetention = (utime_t)strtod(row[9], NULL);
-           strcpy(pdbr->PoolType, row[10]);
-           if (row[11]) {
-              strcpy(pdbr->LabelFormat, row[11]);
+           pdbr->VolUseDuration = (utime_t)strtod(row[10], NULL);
+           pdbr->MaxVolJobs = atoi(row[11]);
+           strcpy(pdbr->PoolType, row[12]);
+           if (row[13]) {
+              strcpy(pdbr->LabelFormat, row[13]);
            } else {
               pdbr->LabelFormat[0] = 0;
            }
@@ -650,12 +652,14 @@ int db_get_media_record(B_DB *mdb, MEDIA_DBR *mr)
    if (mr->MediaId != 0) {              /* find by id */
       Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,\
 VolBytes,VolMounts,VolErrors,VolWrites,VolMaxBytes,VolCapacityBytes,\
-MediaType,VolStatus,PoolId,VolRetention,Recycle,Slot, FirstWritten \
+MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,\
+Recycle,Slot, FirstWritten \
 FROM Media WHERE MediaId=%d", mr->MediaId);
    } else {                          /* find by name */
       Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,\
 VolBytes,VolMounts,VolErrors,VolWrites,VolMaxBytes,VolCapacityBytes,\
-MediaType,VolStatus,PoolId,VolRetention,Recycle,Slot,FirstWritten \
+MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,\
+Recycle,Slot,FirstWritten \
 FROM Media WHERE VolumeName='%s'", mr->VolumeName);
    }  
 
@@ -687,9 +691,11 @@ FROM Media WHERE VolumeName='%s'", mr->VolumeName);
            strcpy(mr->VolStatus, row[12]);
            mr->PoolId = atoi(row[13]);
            mr->VolRetention = (utime_t)strtod(row[14], NULL);
-           mr->Recycle = atoi(row[15]);
-           mr->Slot = atoi(row[16]);
-           strcpy(mr->cFirstWritten, row[17]);
+           mr->VolUseDuration = (utime_t)strtod(row[15], NULL);
+           mr->MaxVolJobs = atoi(row[16]);
+           mr->Recycle = atoi(row[17]);
+           mr->Slot = atoi(row[18]);
+           strcpy(mr->cFirstWritten, row[19]);
            stat = mr->MediaId;
         }
       } else {
index 7099fbe05712751c13d4f9caf7dd734572376cb4..f2b4ca28de360db8ac64d7181788583afdd3d998 100644 (file)
@@ -215,13 +215,13 @@ MediaType=%s\n", mr.PoolId, jcr->PoolId, mr.VolStatus, mr.Slot, mr.MediaType);
 
       /* Now see if Volume should only be used once */
       } else if (mr.VolBytes > 0 && jcr->pool->use_volume_once) {
-         Jmsg(jcr, M_INFO, 0, _("Volume used once. As configured, "             
-             "marking Volume \"%s\" as Used.\n"), mr.VolumeName);
+         Jmsg(jcr, M_INFO, 0, _("Volume used once. "             
+             "Marking Volume \"%s\" as Used.\n"), mr.VolumeName);
          strcpy(mr.VolStatus, "Used");
 
       /* Now see if Max Jobs written to volume */
-      } else if (jcr->pool->MaxVolumeJobs > 0 &&
-                jcr->pool->MaxVolumeJobs <= mr.VolJobs) {
+      } else if (jcr->pool->MaxVolJobs > 0 &&
+                jcr->pool->MaxVolJobs <= mr.VolJobs) {
          Jmsg(jcr, M_INFO, 0, _("Max configured Volume jobs exceeded. "       
              "Marking Volume \"%s\" as Used.\n"), mr.VolumeName);
          strcpy(mr.VolStatus, "Used");
index 01c29b2bae9af3afb91b148b4aa46ef19a769499..367a13d49daf3865b784152e0cecd91245bb1efc 100644 (file)
@@ -227,18 +227,18 @@ static struct res_items group_items[] = {
  *   name            handler     value                        code flags default_value
  */
 static struct res_items pool_items[] = {
-   {"name",            store_name,    ITEM(res_pool.hdr.name),        0, ITEM_REQUIRED, 0},
-   {"description",     store_str,     ITEM(res_pool.hdr.desc),        0, 0,     0},
-   {"pooltype",        store_strname, ITEM(res_pool.pool_type),       0, ITEM_REQUIRED, 0},
-   {"labelformat",     store_strname, ITEM(res_pool.label_format),    0, 0,     0},
+   {"name",            store_name,    ITEM(res_pool.hdr.name),      0, ITEM_REQUIRED, 0},
+   {"description",     store_str,     ITEM(res_pool.hdr.desc),      0, 0,     0},
+   {"pooltype",        store_strname, ITEM(res_pool.pool_type),     0, ITEM_REQUIRED, 0},
+   {"labelformat",     store_strname, ITEM(res_pool.label_format),  0, 0,     0},
    {"usecatalog",      store_yesno, ITEM(res_pool.use_catalog),     1, ITEM_DEFAULT,  1},
    {"usevolumeonce",   store_yesno, ITEM(res_pool.use_volume_once), 1, 0,        0},
    {"maximumvolumes",  store_pint,  ITEM(res_pool.max_volumes),     0, 0,        0},
-   {"maximumvolumejobs", store_pint,  ITEM(res_pool.MaxVolumeJobs),     0, 0,       0},
+   {"maximumvolumejobs", store_pint,  ITEM(res_pool.MaxVolJobs),    0, 0,       0},
    {"acceptanyvolume", store_yesno, ITEM(res_pool.accept_any_volume), 1, ITEM_DEFAULT,     1},
    {"catalogfiles",    store_yesno, ITEM(res_pool.catalog_files),   1, ITEM_DEFAULT,  1},
-   {"volumeretention", store_time,  ITEM(res_pool.VolRetention), 0, ITEM_DEFAULT, 60*60*24*365},
-   {"volumeuseduration", store_time,  ITEM(res_pool.VolUseDuration), 0, 0, 0},
+   {"volumeretention", store_time,  ITEM(res_pool.VolRetention),    0, ITEM_DEFAULT, 60*60*24*365},
+   {"volumeuseduration", store_time,  ITEM(res_pool.VolUseDuration),0, 0, 0},
    {"autoprune",       store_yesno, ITEM(res_pool.AutoPrune), 1, ITEM_DEFAULT, 1},
    {"recycle",         store_yesno, ITEM(res_pool.Recycle),     1, ITEM_DEFAULT, 1},
    {NULL, NULL, NULL, 0, 0, 0} 
index e036a3c6386c5b122e02ceed684b37b13de17c56..7c588252a28ea8960227ae0f0f9827babfb305af 100644 (file)
@@ -245,10 +245,10 @@ struct s_res_pool {
    int   catalog_files;               /* maintain file entries in catalog */
    int   use_volume_once;             /* write on volume only once */
    int   accept_any_volume;           /* accept any volume */
-   int   max_volumes;                 /* max number of volumes */
+   uint32_t max_volumes;              /* max number of volumes */
    utime_t VolRetention;              /* volume retention period in seconds */
    utime_t VolUseDuration;            /* duration volume can be used */
-   uint32_t MaxVolumeJobs;            /* Maximum jobs on the volume */
+   uint32_t MaxVolJobs;               /* Maximum jobs on the volume */
    int   AutoPrune;                   /* default for pool auto prune */
    int   Recycle;                     /* default for media recycle yes/no */
 };
index d616d7b8639627d83a39da0ca39c7b657f18116f..b30f41bae17498ca4b46fd5f1f28d909fa4b9a93 100644 (file)
@@ -476,6 +476,8 @@ int create_pool(B_DB *db, POOL *pool)
    pr.AcceptAnyVolume = pool->accept_any_volume;
    pr.Recycle = pool->Recycle;
    pr.VolRetention = pool->VolRetention;
+   pr.VolUseDuration = pool->VolUseDuration;
+   pr.MaxVolJobs = pool->MaxVolJobs;
    pr.AutoPrune = pool->AutoPrune;
    if (pool->label_format) {
       strcpy(pr.LabelFormat, pool->label_format);
@@ -607,6 +609,8 @@ static int update_volume(UAContext *ua)
       start_prompt(ua, _("Parameters to modify:\n"));
       add_prompt(ua, _("Volume Status"));
       add_prompt(ua, _("Volume Retention Period"));
+      add_prompt(ua, _("Volume Use Duration"));
+      add_prompt(ua, _("Maximum Volume Jobs"));
       add_prompt(ua, _("Recycle Flag"));
       add_prompt(ua, _("Slot"));
       add_prompt(ua, _("Done"));
@@ -629,7 +633,7 @@ static int update_volume(UAContext *ua)
         }
         strcpy(mr.VolStatus, ua->cmd);
         query = get_pool_memory(PM_MESSAGE);
-         Mmsg(&query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%d",
+         Mmsg(&query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%u",
            mr.VolStatus, mr.MediaId);
         if (!db_sql_query(ua->db, query, NULL, NULL)) {  
             bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -647,14 +651,57 @@ static int update_volume(UAContext *ua)
            break;
         }
         query = get_pool_memory(PM_MESSAGE);
-         Mmsg(&query, "UPDATE Media SET VolRetention=%s WHERE MediaId=%d",
+         Mmsg(&query, "UPDATE Media SET VolRetention=%s WHERE MediaId=%u",
            edit_uint64(mr.VolRetention, ed1), mr.MediaId);
         if (!db_sql_query(ua->db, query, NULL, NULL)) {  
             bsendmsg(ua, "%s", db_strerror(ua->db));
         }       
         free_pool_memory(query);
         break;
-      case 2:                        /* Recycle */
+
+      case 2:                        /* Use Duration */
+         bsendmsg(ua, _("Current value is: %s\n"),
+           edit_utime(mr.VolUseDuration, ed1));
+         if (!get_cmd(ua, _("Enter Volume Use Duration: "))) {
+           return 0;
+        }
+        if (!duration_to_utime(ua->cmd, &mr.VolUseDuration)) {
+            bsendmsg(ua, _("Invalid use duration specified.\n"));
+           break;
+        }
+        query = get_pool_memory(PM_MESSAGE);
+         Mmsg(&query, "UPDATE Media SET VolUseDuration=%s WHERE MediaId=%u",
+           edit_uint64(mr.VolUseDuration, ed1), mr.MediaId);
+        if (!db_sql_query(ua->db, query, NULL, NULL)) {  
+            bsendmsg(ua, "%s", db_strerror(ua->db));
+        }       
+        free_pool_memory(query);
+        break;
+
+      case 3:                        /* Max Jobs */
+        int32_t maxjobs;
+         bsendmsg(ua, _("Current value is: %u\n"), mr.MaxVolJobs);
+         if (!get_cmd(ua, _("Enter new Maximum Jobs: "))) {
+           return 0;
+        }
+        maxjobs = atoi(ua->cmd);
+        if (maxjobs < 0) {
+            bsendmsg(ua, _("Invalid number, it must be 0 or greater\n"));
+           break;
+        } 
+        query = get_pool_memory(PM_MESSAGE);
+         Mmsg(&query, "UPDATE Media SET MaxVolJobs=%u WHERE MediaId=%u",
+           maxjobs, mr.MediaId);
+        if (!db_sql_query(ua->db, query, NULL, NULL)) {  
+            bsendmsg(ua, "%s", db_strerror(ua->db));
+        } else {
+            bsendmsg(ua, "New value is: %u\n", maxjobs);
+        }
+        free_pool_memory(query);
+        break;
+
+
+      case 4:                        /* Recycle */
         int recycle;
          bsendmsg(ua, _("Current value is: %s\n"),
             mr.Recycle==1?_("yes"):_("no"));
@@ -670,7 +717,7 @@ static int update_volume(UAContext *ua)
            break;
         }
         query = get_pool_memory(PM_MESSAGE);
-         Mmsg(&query, "UPDATE Media SET Recycle=%d WHERE MediaId=%d",
+         Mmsg(&query, "UPDATE Media SET Recycle=%d WHERE MediaId=%u",
            recycle, mr.MediaId);
         if (!db_sql_query(ua->db, query, NULL, NULL)) {  
             bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -678,7 +725,7 @@ static int update_volume(UAContext *ua)
         free_pool_memory(query);
         break;
 
-      case 3:                        /* Slot */
+      case 5:                        /* Slot */
         int slot;
          bsendmsg(ua, _("Current value is: %d\n"), mr.Slot);
          if (!get_cmd(ua, _("Enter new Slot: "))) {
@@ -694,7 +741,7 @@ static int update_volume(UAContext *ua)
            break;
         }
         query = get_pool_memory(PM_MESSAGE);
-         Mmsg(&query, "UPDATE Media SET Slot=%d WHERE MediaId=%d",
+         Mmsg(&query, "UPDATE Media SET Slot=%d WHERE MediaId=%u",
            slot, mr.MediaId);
         if (!db_sql_query(ua->db, query, NULL, NULL)) {  
             bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -704,7 +751,6 @@ static int update_volume(UAContext *ua)
         free_pool_memory(query);
         break;
 
-        
       default:                       /* Done or error */
          bsendmsg(ua, "Selection done.\n");
         return 1;
@@ -734,7 +780,7 @@ static int update_pool(UAContext *ua)
       return 0;
    }
    strcpy(pr.PoolType, pool->pool_type);
-   if (pr.MaxVols != (uint32_t) (pool->max_volumes)) {
+   if (pr.MaxVols != pool->max_volumes) {
       pr.MaxVols = pool->max_volumes;
    }
    if (pr.MaxVols != 0 && pr.MaxVols < pr.NumVols) {
@@ -744,6 +790,8 @@ static int update_pool(UAContext *ua)
    pr.UseCatalog = pool->use_catalog;
    pr.AcceptAnyVolume = pool->accept_any_volume;
    pr.VolRetention = pool->VolRetention;
+   pr.VolUseDuration = pool->VolUseDuration;
+   pr.MaxVolJobs = pool->MaxVolJobs;
    if (pool->label_format) {
       strcpy(pr.LabelFormat, pool->label_format);
    } else {
index 08a29752cc6404a49c4cd576d2e51b6c08bf8515..db75bc60164a9648aafbe861639c8c82dca334a9 100644 (file)
@@ -1,8 +1,8 @@
 /* */
 #define VERSION "1.27"
 #define VSTRING "1"
-#define DATE    "15 November 2002"
-#define LSMDATE "15Nov02"
+#define DATE    "18 November 2002"
+#define LSMDATE "18Nov02"
 
 /* Debug flags */
 #define DEBUG 1