POOL_MEM query(PM_MESSAGE);
UAContext *ua;
bool ok = false;
- char ed1[50], ed2[100];
+ char ed1[50], ed2[100], ed3[50];
POOL_DBR spr;
Dmsg1(050, "Prune volumes PoolId=%d\n", jcr->jr.PoolId);
* RecyclePoolId is the current pool or the scratch pool
*/
const char *select = "SELECT DISTINCT MediaId,LastWritten FROM Media WHERE "
- "(PoolId=%s OR RecyclePoolId IN (%s)) AND MediaType='%s' "
+ "(PoolId=%s OR RecyclePoolId IN (%s)) AND MediaType='%s' %s"
"ORDER BY LastWritten ASC,MediaId";
- Mmsg(query, select, ed1, ed2, mr->MediaType);
+ if (InChanger) {
+ char changer[100];
+ /* Ensure it is in this autochanger */
+ bsnprintf(changer, sizeof(changer), "AND InChanger=1 AND StorageId=%s ",
+ edit_int64(mr->StorageId, ed3));
+ Mmsg(query, select, ed1, ed2, mr->MediaType, changer);
+ } else {
+ Mmsg(query, select, ed1, ed2, mr->MediaType, "");
+ }
Dmsg1(050, "query=%s\n", query.c_str());
if (!db_get_query_dbids(ua->jcr, ua->db, query, ids)) {
prune_list.num_ids = 0; /* reset count */
}
ok = is_volume_purged(ua, &lmr);
+
+ /*
+ * Check if this volume is available (InChanger + StorageId)
+ * If not, just skip this volume and try the next one
+ */
+ if (ok && InChanger) {
+ if (!lmr.InChanger || (lmr.StorageId != mr->StorageId)) {
+ ok = false; /* skip this volume, ie not loadable */
+ }
+ }
+
/*
* If purged and not moved to another Pool,
* then we stop pruning and take this volume.
General:
+05Jul08
+kes Apply Eric's patch to ensure that autoprune does not return
+ a Volume not in the autochanger unless requested to do so.
+kes Correct bat restore display of multiple drives. This fixes
+ bug #1117.
+kes Do find_a_volume() each time an unload is done. This
+ fixes the failure of maxvol2-test.
04Jul08
kes Add some SD debug code.
kes Do find_a_volume() each time an unload is done.