The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
ok = db_find_next_volume(jcr, jcr->db, index, InChanger, mr);
if (!ok) {
ok = db_find_next_volume(jcr, jcr->db, index, InChanger, mr);
if (!ok) {
Dmsg4(dbglvl, "after find_next_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
ok, index, InChanger, mr->VolStatus);
/*
* 2. Try finding a recycled volume
*/
Dmsg4(dbglvl, "after find_next_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
ok, index, InChanger, mr->VolStatus);
/*
* 2. Try finding a recycled volume
*/
- ok = find_recycled_volume(jcr, InChanger, mr);
+ ok = find_recycled_volume(jcr, InChanger, mr, store);
+ set_storageid_in_mr(store, mr); /* put StorageId in new record */
Dmsg2(dbglvl, "find_recycled_volume ok=%d FW=%d\n", ok, mr->FirstWritten);
if (!ok) {
/*
* 3. Try recycling any purged volume
*/
Dmsg2(dbglvl, "find_recycled_volume ok=%d FW=%d\n", ok, mr->FirstWritten);
if (!ok) {
/*
* 3. Try recycling any purged volume
*/
- ok = recycle_oldest_purged_volume(jcr, InChanger, mr);
+ ok = recycle_oldest_purged_volume(jcr, InChanger, mr, store);
+ set_storageid_in_mr(store, mr); /* put StorageId in new record */
- ok = recycle_oldest_purged_volume(jcr, InChanger, mr);
+ ok = recycle_oldest_purged_volume(jcr, InChanger, mr, store);
+ set_storageid_in_mr(store, mr); /* put StorageId in new record */
if (!ok && create) {
Dmsg4(dbglvl, "after prune volumes_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
ok, index, InChanger, mr->VolStatus);
/*
* 5. Try pulling a volume from the Scratch pool
*/
if (!ok && create) {
Dmsg4(dbglvl, "after prune volumes_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
ok, index, InChanger, mr->VolStatus);
/*
* 5. Try pulling a volume from the Scratch pool
*/
- ok = get_scratch_volume(jcr, InChanger, mr);
+ ok = get_scratch_volume(jcr, InChanger, mr, store);
+ set_storageid_in_mr(store, mr); /* put StorageId in new record */
Dmsg4(dbglvl, "after get scratch volume ok=%d index=%d InChanger=%d Vstat=%s\n",
ok, index, InChanger, mr->VolStatus);
}
Dmsg4(dbglvl, "after get scratch volume ok=%d index=%d InChanger=%d Vstat=%s\n",
ok, index, InChanger, mr->VolStatus);
}
Dmsg2(dbglvl, "No next volume found. PurgeOldest=%d\n RecyleOldest=%d",
jcr->pool->purge_oldest_volume, jcr->pool->recycle_oldest_volume);
/* Find oldest volume to recycle */
Dmsg2(dbglvl, "No next volume found. PurgeOldest=%d\n RecyleOldest=%d",
jcr->pool->purge_oldest_volume, jcr->pool->recycle_oldest_volume);
/* Find oldest volume to recycle */
ok = db_find_next_volume(jcr, jcr->db, -1, InChanger, mr);
ok = db_find_next_volume(jcr, jcr->db, -1, InChanger, mr);
if (expired) {
/* Need to update media */
Dmsg1(dbglvl, "Vol=%s has expired update media record\n", mr->VolumeName);
if (expired) {
/* Need to update media */
Dmsg1(dbglvl, "Vol=%s has expired update media record\n", mr->VolumeName);
if (!db_update_media_record(jcr, jcr->db, mr)) {
Jmsg(jcr, M_ERROR, 0, _("Catalog error updating volume \"%s\". ERR=%s"),
mr->VolumeName, db_strerror(jcr->db));
if (!db_update_media_record(jcr, jcr->db, mr)) {
Jmsg(jcr, M_ERROR, 0, _("Catalog error updating volume \"%s\". ERR=%s"),
mr->VolumeName, db_strerror(jcr->db));
-bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr)
+bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr,
+ STORE *store)
bstrncpy(spr.Name, "Scratch", sizeof(spr.Name));
spr.PoolId = mr->ScratchPoolId;
if (db_get_pool_record(jcr, jcr->db, &spr)) {
bstrncpy(spr.Name, "Scratch", sizeof(spr.Name));
spr.PoolId = mr->ScratchPoolId;
if (db_get_pool_record(jcr, jcr->db, &spr)) {
* recycling any existing purged volumes, then
* try to take the oldest volume.
*/
* recycling any existing purged volumes, then
* try to take the oldest volume.
*/
if (db_find_next_volume(jcr, jcr->db, 1, InChanger, &smr)) {
found = true;
if (db_find_next_volume(jcr, jcr->db, 1, InChanger, &smr)) {
found = true;
- } else if (find_recycled_volume(jcr, InChanger, &smr)) {
+ } else if (find_recycled_volume(jcr, InChanger, &smr, store)) {
- } else if (recycle_oldest_purged_volume(jcr, InChanger, &smr)) {
+ } else if (recycle_oldest_purged_volume(jcr, InChanger, &smr, store)) {
/* Set default parameters from current pool */
set_pool_dbr_defaults_in_media_dbr(mr, &pr);
/* Set default parameters from current pool */
set_pool_dbr_defaults_in_media_dbr(mr, &pr);