extern char my_name[];
extern workq_t job_wq; /* work queue */
+extern char *list_pool;
+
/* Imported functions */
extern int statuscmd(UAContext *ua, char *cmd);
extern int listcmd(UAContext *ua, char *cmd);
POOL_DBR pr;
int id;
POOL *pool;
+ POOLMEM *query;
pool = get_pool_resource(ua);
bsendmsg(ua, _("db_update_pool_record returned %d. ERR=%s\n"),
id, db_strerror(ua->db));
}
+ query = get_pool_memory(PM_MESSAGE);
+ Mmsg(&query, list_pool, pr.PoolId);
+ db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1);
+ free_pool_memory(query);
bsendmsg(ua, _("Pool DB record updated from resource.\n"));
return 1;
}
* list files job=name
* list pools - list pool records
* list jobtotals - list totals for all jobs
- * list media - list media for given pool
+ * list media - list media for given pool (deprecated)
+ * list volumes - list Volumes
* list clients - list clients
*
*/
}
/* if no job or jobid keyword found, then we list all media */
if (!done) {
- if (!get_pool_dbr(ua, &pr)) {
+ int num_pools;
+ uint32_t *ids;
+ /* Is a specific pool wanted? */
+ for (i=1; i<ua->argc; i++) {
+ if (strcasecmp(ua->argk[i], _("pool")) == 0) {
+ if (!get_pool_dbr(ua, &pr)) {
+ return 1;
+ }
+ mr.PoolId = pr.PoolId;
+ db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua);
+ return 1;
+ }
+ }
+ /* List Volumes in all pools */
+ if (!db_get_pool_ids(ua->jcr, ua->db, &num_pools, &ids)) {
+ bsendmsg(ua, _("Error obtaining pool ids. ERR=%s\n"),
+ db_strerror(ua->db));
return 1;
}
- mr.PoolId = pr.PoolId;
- db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua);
+ if (num_pools <= 0) {
+ return 1;
+ }
+ for (i=0; i < num_pools; i++) {
+ mr.PoolId = ids[i];
+ db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua);
+ }
+ free(ids);
+ return 1;
}
} else {
bsendmsg(ua, _("Unknown list keyword: %s\n"), NPRT(ua->argk[i]));
static char *keywords[] = {
N_("files"),
N_("jobs"),
+ N_("volume"),
NULL};
static char *files_keywords[] = {
case 0:
switch(find_arg_keyword(ua, files_keywords)) {
case 0: /* Job */
- case 1:
+ case 1: /* JobId */
if (get_job_dbr(ua, &jr)) {
purge_files_from_job(ua, &jr);
}
client = select_client_resource(ua);
purge_files_from_client(ua, client);
return 1;
- case 3:
+ case 3: /* Volume */
if (select_pool_and_media_dbr(ua, &pr, &mr)) {
purge_files_from_volume(ua, &pr, &mr);
}
client = select_client_resource(ua);
purge_jobs_from_client(ua, client);
return 1;
- case 1:
+ case 1: /* Volume */
if (select_pool_and_media_dbr(ua, &pr, &mr)) {
purge_jobs_from_volume(ua, &pr, &mr);
}
return 1;
}
+ /* Volume */
+ case 2:
+ if (select_pool_and_media_dbr(ua, &pr, &mr)) {
+ purge_jobs_from_volume(ua, &pr, &mr);
+ }
+ return 1;
default:
break;
}
switch (do_keyword_prompt(ua, _("Choose item to purge"), keywords)) {
- case 0:
+ case 0: /* files */
client = select_client_resource(ua);
if (!client) {
return 1;
}
purge_files_from_client(ua, client);
break;
- case 1:
+ case 1: /* jobs */
client = select_client_resource(ua);
if (!client) {
return 1;
}
purge_jobs_from_client(ua, client);
break;
+ case 2: /* Volume */
+ if (select_pool_and_media_dbr(ua, &pr, &mr)) {
+ purge_jobs_from_volume(ua, &pr, &mr);
+ }
+ break;
}
return 1;
}
bsendmsg(ua, "There are no Jobs associated with Volume %s. Marking it purged.\n",
mr->VolumeName);
if (!mark_media_purged(ua, mr)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
goto bail_out;
}
goto bail_out;
/* If purged, mark it so */
if (del.num_ids == del.num_del) {
- mark_media_purged(ua, mr);
+ if (!mark_media_purged(ua, mr)) {
+ bsendmsg(ua, "%s", db_strerror(ua->db));
+ }
}
bail_out:
}
/*
- * IF volume status is Append, Full, or Used, mark it Purged
+ * IF volume status is Append, Full, Used, or Error, mark it Purged
* Purged volumes can then be recycled (if enabled).
*/
int mark_media_purged(UAContext *ua, MEDIA_DBR *mr)
{
if (strcmp(mr->VolStatus, "Append") == 0 ||
strcmp(mr->VolStatus, "Full") == 0 ||
- strcmp(mr->VolStatus, "Used") == 0) {
+ strcmp(mr->VolStatus, "Used") == 0 ||
+ strcmp(mr->VolStatus, "Error") == 0) {
strcpy(mr->VolStatus, "Purged");
if (!db_update_media_record(ua->jcr, ua->db, mr)) {
- if (ua->verbose) {
- bsendmsg(ua, "%s", db_strerror(ua->db));
- }
return 0;
}
return 1;
+ } else {
+ bsendmsg(ua, _("Cannot purge Volume with VolStatus=%s\n"), mr->VolStatus);
}
return strcpy(mr->VolStatus, "Purged") == 0;
}