X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=bacula%2Fsrc%2Fdird%2Fnext_vol.c;h=5a973b8b6fd3b591079f768d778f51e86208cee0;hb=96eef18773695ed50a430821386d90a5eadfd8d4;hp=a675a073749671e005587c150edd86bdde1f149c;hpb=5323b4d675cd7ae1fb2fbdb16b76c79d6fd60c88;p=bacula%2Fbacula diff --git a/bacula/src/dird/next_vol.c b/bacula/src/dird/next_vol.c index a675a07374..5a973b8b6f 100644 --- a/bacula/src/dird/next_vol.c +++ b/bacula/src/dird/next_vol.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2008 Free Software Foundation Europe e.V. + Copyright (C) 2001-2009 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -42,6 +42,8 @@ /* * Items needed: * mr.PoolId must be set + * mr.StorageId should also be set + * mr.ScratchPoolId could be set (used if create==true) * jcr->wstore * jcr->db * jcr->pool @@ -134,10 +136,10 @@ int find_next_volume_for_append(JCR *jcr, MEDIA_DBR *mr, int index, 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); - Dmsg1(400, "Find oldest=%d\n", ok); + Dmsg1(200, "Find oldest=%d Volume\n", ok); if (ok && prune) { UAContext *ua; - Dmsg0(400, "Try purge.\n"); + Dmsg0(200, "Try purge Volume.\n"); /* * 7. Try to purging oldest volume only if not UA calling us. */ @@ -258,11 +260,6 @@ void check_if_volume_valid_or_recyclable(JCR *jcr, MEDIA_DBR *mr, const char **r *reason = NULL; - if (!mr->Recycle) { - *reason = _("volume has recycling disabled"); - return; - } - /* Check if a duration or limit has expired */ if (has_volume_expired(jcr, mr)) { *reason = _("volume has expired"); @@ -302,8 +299,12 @@ void check_if_volume_valid_or_recyclable(JCR *jcr, MEDIA_DBR *mr, const char **r * it now possible to reuse it for the job that it is currently * needed for? */ + if (!mr->Recycle) { + *reason = _("volume has recycling disabled"); + return; + } if ((mr->LastWritten + mr->VolRetention) < (utime_t)time(NULL) - && mr->Recycle && jcr->pool->recycle_current_volume + && jcr->pool->recycle_current_volume && (strcmp(mr->VolStatus, "Full") == 0 || strcmp(mr->VolStatus, "Used") == 0)) { /* @@ -346,9 +347,13 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr) P(mutex); /* * Get Pool record for Scratch Pool + * choose between ScratchPoolId and Scratch + * db_get_pool_record will first try ScratchPoolId, + * and then try the pool named Scratch */ memset(&spr, 0, sizeof(spr)); bstrncpy(spr.Name, "Scratch", sizeof(spr.Name)); + spr.PoolId = mr->ScratchPoolId; if (db_get_pool_record(jcr, jcr->db, &spr)) { memset(&smr, 0, sizeof(smr)); smr.PoolId = spr.PoolId;