switch (kw) {
case 0: /* prune files */
- client = select_client_resource(ua);
+ client = get_client_resource(ua);
if (!client || !confirm_retention(ua, &client->FileRetention, "File")) {
return 0;
}
prune_files(ua, client);
return 1;
case 1: /* prune jobs */
- client = select_client_resource(ua);
+ client = get_client_resource(ua);
if (!client || !confirm_retention(ua, &client->JobRetention, "Job")) {
return 0;
}
db_lock(ua->db);
memset(&cr, 0, sizeof(cr));
memset(&del, 0, sizeof(del));
- strcpy(cr.Name, client->hdr.name);
+ bstrncpy(cr.Name, client->hdr.name, sizeof(cr.Name));
if (!db_create_client_record(ua->jcr, ua->db, &cr)) {
db_unlock(ua->db);
return 0;
db_lock(ua->db);
memset(&cr, 0, sizeof(cr));
memset(&del, 0, sizeof(del));
- strcpy(cr.Name, client->hdr.name);
+ bstrncpy(cr.Name, client->hdr.name, sizeof(cr.Name));
if (!db_create_client_record(ua->jcr, ua->db, &cr)) {
db_unlock(ua->db);
return 0;
}
/* Count Files to be deleted */
- strcpy(query, cnt_DelCand);
+ pm_strcpy(&query, cnt_DelCand);
Dmsg1(100, "select sql=%s\n", query);
cnt.count = 0;
if (!db_sql_query(ua->db, query, count_handler, (void *)&cnt)) {
db_lock(ua->db);
memset(&jr, 0, sizeof(jr));
memset(&del, 0, sizeof(del));
+
+ /*
+ * Find out how many Jobs remain on this Volume by
+ * counting the JobMedia records.
+ */
cnt.count = 0;
Mmsg(&query, cnt_JobMedia, mr->MediaId);
if (!db_sql_query(ua->db, query, count_handler, (void *)&cnt)) {
del.max_ids = MAX_DEL_LIST_LEN;
}
+ /*
+ * Now get a list of JobIds for Jobs written to this Volume
+ * Could optimize here by adding JobTDate > (now - period).
+ */
del.JobId = (JobId_t *)malloc(sizeof(JobId_t) * del.max_ids);
-
- /* ***FIXME*** could make this do JobTDate check too */
Mmsg(&query, sel_JobMedia, mr->MediaId);
if (!db_sql_query(ua->db, query, file_delete_handler, (void *)&del)) {
if (ua->verbose) {
goto bail_out;
}
- /* Use Volume Retention to prune Jobs and Files */
+ /* Use Volume Retention to prune Jobs and their Files */
period = mr->VolRetention;
now = (utime_t)time(NULL);
Dmsg3(200, "Now=%d period=%d now-period=%d\n", (int)now, (int)period,
(int)(now-period));
+
for (i=0; i < del.num_ids; i++) {
jr.JobId = del.JobId[i];
if (!db_get_job_record(ua->jcr, ua->db, &jr)) {