From fd23a7cf82db3f9356371f31a433bf0d8273eeac Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Tue, 17 Jul 2007 20:20:22 +0000 Subject: [PATCH] ebl fix a bug in get_scratch_volume() report by Andreas Helmcke Warning, in previous version, all media get from scratch keep their old retention. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5192 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/dird/next_vol.c | 87 ++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 47 deletions(-) diff --git a/bacula/src/dird/next_vol.c b/bacula/src/dird/next_vol.c index ed54ccf7e1..c42dd4730b 100644 --- a/bacula/src/dird/next_vol.c +++ b/bacula/src/dird/next_vol.c @@ -331,7 +331,6 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr) POOL_DBR spr, pr; bool ok = false; bool found = false; - char ed1[50], ed2[50]; /* Only one thread at a time can pull from the scratch pool */ P(mutex); @@ -373,53 +372,47 @@ bool get_scratch_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr) */ memset(&pr, 0, sizeof(pr)); bstrncpy(pr.Name, jcr->pool->hdr.name, sizeof(pr.Name)); - if (!db_get_pool_record(jcr, jcr->db, &pr)) { - Jmsg(jcr, M_WARNING, 0, _("Unable to get Pool record: ERR=%s"), - db_strerror(jcr->db)); - goto bail_out; - } - if (pr.MaxVols > 0 && pr.NumVols >= pr.MaxVols) { - Jmsg(jcr, M_WARNING, 0, _("Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n"), - jcr->pool->hdr.name, pr.MaxVols); - goto bail_out; - } - /* OK, now move Scratch Volume */ - db_lock(jcr->db); - Mmsg(query, "UPDATE Media SET PoolId=%s WHERE MediaId=%s", - edit_int64(mr->PoolId, ed1), - edit_int64(smr.MediaId, ed2)); - ok = db_sql_query(jcr->db, query.c_str(), NULL, NULL); - db_unlock(jcr->db); - if (!ok) { - Jmsg(jcr, M_WARNING, 0, _("Failed to move Scratch Volume. ERR=%s\n"), - db_strerror(jcr->db)); - goto bail_out; - } - Jmsg(jcr, M_INFO, 0, _("Using Volume \"%s\" from 'Scratch' pool.\n"), - smr.VolumeName); - /* - * Get *full* media record to return as db_find_next_volume does - * not return everything . - */ - if (!db_get_media_record(jcr, jcr->db, mr)) { - Jmsg(jcr, M_WARNING, 0, _("Unable to get Volume record: ERR=%s"), - db_strerror(jcr->db)); - goto bail_out; - } - /* Set default parameters from current pool */ - set_pool_dbr_defaults_in_media_dbr(mr, &pr); - /* - * set_pool_dbr_defaults_in_media_dbr set VolStatus to Append, - * we could have Recycled media, - */ - bstrncpy(mr->VolStatus, smr.VolStatus, sizeof(smr.VolStatus)); - if (!db_update_media_record(jcr, jcr->db, mr)) { - Jmsg(jcr, M_WARNING, 0, _("Unable to update Volume record: ERR=%s"), - db_strerror(jcr->db)); - goto bail_out; - } - ok = true; + if (!db_get_pool_record(jcr, jcr->db, &pr)) { + Jmsg(jcr, M_WARNING, 0, _("Unable to get Pool record: ERR=%s"), + db_strerror(jcr->db)); + goto bail_out; + } + + if (pr.MaxVols > 0 && pr.NumVols >= pr.MaxVols) { + Jmsg(jcr, M_WARNING, 0, _("Unable add Scratch Volume, Pool \"%s\" full MaxVols=%d\n"), + jcr->pool->hdr.name, pr.MaxVols); + goto bail_out; + } + /* OK, now move Scratch Volume */ + + /* + * Get *full* media record to return as db_find_next_volume does + * not return everything . + */ + mr->MediaId = smr.MediaId; + if (!db_get_media_record(jcr, jcr->db, mr)) { + Jmsg(jcr, M_WARNING, 0, _("Unable to get Volume record: ERR=%s"), + db_strerror(jcr->db)); + goto bail_out; + } + /* Set default parameters from current pool */ + set_pool_dbr_defaults_in_media_dbr(mr, &pr); + /* + * set_pool_dbr_defaults_in_media_dbr set VolStatus to Append, + * we could have Recycled media, + */ + bstrncpy(mr->VolStatus, smr.VolStatus, sizeof(smr.VolStatus)); + if (!db_update_media_record(jcr, jcr->db, mr)) { + Jmsg(jcr, M_WARNING, 0, _("Failed to move Scratch Volume. ERR=%s\n"), + db_strerror(jcr->db)); + goto bail_out; + } + + Jmsg(jcr, M_INFO, 0, _("Using Volume \"%s\" from 'Scratch' pool.\n"), + mr->VolumeName); + + ok = true; } } bail_out: -- 2.39.5