From: Kern Sibbald Date: Mon, 26 Mar 2007 20:14:40 +0000 (+0000) Subject: More pruning cleanup X-Git-Tag: Release-7.0.0~6694 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=effb543c440df2e8db1ee10e574cabb1d78ce665;p=bacula%2Fbacula More pruning cleanup git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4431 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/autoprune.c b/bacula/src/dird/autoprune.c index 45cfcabf2c..b745aac8db 100644 --- a/bacula/src/dird/autoprune.c +++ b/bacula/src/dird/autoprune.c @@ -145,12 +145,12 @@ bool prune_volumes(JCR *jcr, MEDIA_DBR *mr) if (count != 0) { purge_job_list_from_catalog(ua, del); del.num_ids = 0; /* reset count */ - ok = is_volume_purged(ua, &lmr); - if (ok) { - Dmsg2(050, "Vol=%s MediaId=%d purged.\n", lmr.VolumeName, (int)lmr.MediaId); - mr = &lmr; /* struct copy */ - break; - } + } + ok = is_volume_purged(ua, &lmr); + if (ok) { + Dmsg2(050, "Vol=%s MediaId=%d purged.\n", lmr.VolumeName, (int)lmr.MediaId); + mr = &lmr; /* struct copy */ + break; } } } diff --git a/bacula/src/dird/ua_prune.c b/bacula/src/dird/ua_prune.c index c411106494..31e62e0389 100644 --- a/bacula/src/dird/ua_prune.c +++ b/bacula/src/dird/ua_prune.c @@ -384,121 +384,32 @@ bail_out: bool prune_volume(UAContext *ua, MEDIA_DBR *mr) { POOL_MEM query(PM_MESSAGE); - struct s_count_ctx cnt; struct del_ctx del; - int i; bool ok = false; - JOB_DBR jr; - utime_t now, period; - char ed1[50], ed2[50]; + int count; if (mr->Enabled == 2) { return false; /* Cannot prune archived volumes */ } - db_lock(ua->db); - memset(&jr, 0, sizeof(jr)); memset(&del, 0, sizeof(del)); - - /* - * Find out how many Jobs remain on this Volume by - * counting the JobMedia records. - */ - cnt.count = 0; - Mmsg(query, cnt_JobMedia, edit_int64(mr->MediaId, ed1)); - Dmsg1(150, "Query=%s\n", query.c_str()); - if (!db_sql_query(ua->db, query.c_str(), del_count_handler, (void *)&cnt)) { - bsendmsg(ua, "%s", db_strerror(ua->db)); - Dmsg0(050, "Count failed\n"); - goto bail_out; - } - - if (cnt.count == 0) { - /* Don't mark appendable volume as purged */ - if (strcmp(mr->VolStatus, "Append") == 0 && verbose) { - bsendmsg(ua, _("There are no Jobs associated with Volume \"%s\". Prune not needed.\n"), - mr->VolumeName); - ok = true; - goto bail_out; - } - /* If volume not already purged, do so */ - if (strcmp(mr->VolStatus, "Purged") != 0 && verbose) { - bsendmsg(ua, _("There are no Jobs associated with Volume \"%s\". Marking it purged.\n"), - mr->VolumeName); - } - ok = mark_media_purged(ua, mr); - goto bail_out; - } - - if (cnt.count < MAX_DEL_LIST_LEN) { - del.max_ids = cnt.count + 1; - } else { - del.max_ids = MAX_DEL_LIST_LEN; - } - - /* - * Now get a list of JobIds for Jobs written to this Volume - */ + del.max_ids = 1000; del.JobId = (JobId_t *)malloc(sizeof(JobId_t) * del.max_ids); - /* Use Volume Retention to prune Jobs and their Files */ - period = mr->VolRetention; - now = (utime_t)time(NULL); - Mmsg(query, sel_JobMedia, edit_int64(mr->MediaId, ed1), - edit_uint64(now-period, ed2)); - Dmsg3(250, "Now=%d period=%d now-period=%d\n", (int)now, (int)period, - (int)(now-period)); - - Dmsg1(150, "Query=%s\n", query.c_str()); - if (!db_sql_query(ua->db, query.c_str(), file_delete_handler, (void *)&del)) { - if (ua->verbose) { - bsendmsg(ua, "%s", db_strerror(ua->db)); - } - Dmsg0(050, "Count failed\n"); - goto bail_out; - } - + db_lock(ua->db); - cnt.count = 0; - for (i=0; i < del.num_ids; i++) { - if (ua->jcr->JobId == del.JobId[i]) { - Dmsg2(250, "skip same job JobId[%d]=%d\n", i, (int)del.JobId[i]); - del.JobId[i] = 0; - continue; + /* Prune only Volumes with status "Full", or "Used" */ + if (strcmp(mr->VolStatus, "Full") == 0 || + strcmp(mr->VolStatus, "Used") == 0) { + Dmsg2(050, "get prune list MediaId=%d Volume %s\n", (int)mr->MediaId, mr->VolumeName); + count = get_prune_list_for_volume(ua, mr, &del); + Dmsg1(050, "Num pruned = %d\n", count); + if (count != 0) { + purge_job_list_from_catalog(ua, del); } - Dmsg2(250, "accept JobId[%d]=%d\n", i, (int)del.JobId[i]); - cnt.count++; - } - if (cnt.count != 0) { - purge_job_list_from_catalog(ua, del); - } else { - Dmsg0(050, "No jobs to prune.\n"); - goto bail_out; - } - - if (ua->verbose && del.num_del != 0) { - bsendmsg(ua, _("Pruned %d %s on Volume \"%s\" from catalog.\n"), del.num_del, - del.num_del == 1 ? "Job" : "Jobs", mr->VolumeName); - } - - /* - * Find out how many Jobs remain on this Volume by - * counting the JobMedia records. - */ - cnt.count = 0; - Mmsg(query, cnt_JobMedia, edit_int64(mr->MediaId, ed1)); - Dmsg1(150, "Query=%s\n", query.c_str()); - if (!db_sql_query(ua->db, query.c_str(), del_count_handler, (void *)&cnt)) { - bsendmsg(ua, "%s", db_strerror(ua->db)); - Dmsg0(050, "Count failed\n"); - goto bail_out; - } - if (cnt.count == 0) { - Dmsg0(200, "Volume is purged.\n"); - ok = mark_media_purged(ua, mr); + ok = is_volume_purged(ua, mr); } -bail_out: db_unlock(ua->db); if (del.JobId) { free(del.JobId); diff --git a/bacula/src/stored/dircmd.c b/bacula/src/stored/dircmd.c index 72e239049e..2d6f1b13bd 100644 --- a/bacula/src/stored/dircmd.c +++ b/bacula/src/stored/dircmd.c @@ -313,7 +313,7 @@ static bool cancel_cmd(JCR *cjcr) pthread_cond_broadcast(&jcr->read_dcr->dev->wait_next_vol); pthread_cond_broadcast(&wait_device_release); } - Jmsg(jcr, M_INFO, 0, _("Job marked to be canceled.\n")); + Jmsg(jcr, M_INFO, 0, _("Job %s marked to be canceled.\n"), jcr->Job); bnet_fsend(dir, _("3000 Job %s marked to be canceled.\n"), jcr->Job); free_jcr(jcr); } diff --git a/bacula/technotes-2.1 b/bacula/technotes-2.1 index 29642ae6d1..48c742a679 100644 --- a/bacula/technotes-2.1 +++ b/bacula/technotes-2.1 @@ -2,6 +2,7 @@ General: 26Mar07 +kes More pruning cleanup. kes Turn on wait_for_drive by default in mtx-changer. kes Turn on Batch insert code by default as it now passes regression. kes Add ./configure --enable-bat to enable building of Bat.