/*
Bacula® - The Network Backup Solution
- Copyright (C) 2002-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2002-2012 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.
db_lock(ua->db);
/* Do it in two times for mysql */
- Mmsg(query, uap_upgrade_copies_oldest_job[db_type], JT_JOB_COPY, jobs, jobs);
+ Mmsg(query, uap_upgrade_copies_oldest_job[db_get_type_index(ua->db)], JT_JOB_COPY, jobs, jobs);
db_sql_query(ua->db, query.c_str(), NULL, (void *)NULL);
Dmsg1(050, "Upgrade copies Log sql=%s\n", query.c_str());
/* If purged, mark it so */
cnt.count = 0;
- Mmsg(query, "SELECT count(*) FROM JobMedia WHERE MediaId=%s",
+ Mmsg(query, "SELECT 1 FROM JobMedia WHERE MediaId=%s LIMIT 1",
edit_int64(mr->MediaId, ed1));
if (!db_sql_query(ua->db, query.c_str(), del_count_handler, (void *)&cnt)) {
ua->error_msg("%s", db_strerror(ua->db));
if (ok) {
mr->VolBytes = VolBytes;
mr->VolFiles = 0;
+ set_storageid_in_mr(NULL, mr);
if (!db_update_media_record(ua->jcr, ua->db, mr)) {
ua->error_msg(_("Can't update volume size in the catalog\n"));
}
BSOCK *sd = NULL;
memset(&pr, 0, sizeof(pr));
- memset(&mr, 0, sizeof(mr));
/* Look at arguments */
for (int i=1; i<ua->argc; i++) {
if (strcasecmp(ua->argk[i], NT_("allpools")) == 0) {
allpools = true;
- } else if (strcasecmp(ua->argk[i], NT_("volume")) == 0 && ua->argv[i]) {
+ } else if (strcasecmp(ua->argk[i], NT_("volume")) == 0
+ && is_name_valid(ua->argv[i], NULL)) {
bstrncpy(mr.VolumeName, ua->argv[i], sizeof(mr.VolumeName));
- } else if (strcasecmp(ua->argk[i], NT_("devicetype")) == 0 && ua->argv[i]) {
+ } else if (strcasecmp(ua->argk[i], NT_("devicetype")) == 0
+ && ua->argv[i]) {
bstrncpy(mr.MediaType, ua->argv[i], sizeof(mr.MediaType));
} else if (strcasecmp(ua->argk[i], NT_("drive")) == 0 && ua->argv[i]) {
drive = atoi(ua->argv[i]);
- } else if (strcasecmp(ua->argk[i], NT_("action")) == 0 && ua->argv[i]) {
+ } else if (strcasecmp(ua->argk[i], NT_("action")) == 0
+ && is_name_valid(ua->argv[i], NULL)) {
action=ua->argv[i];
}
}
if (!store) {
goto bail_out;
}
- mr.StorageId = store->StorageId;
if (!open_db(ua)) {
Dmsg0(100, "Can't open db\n");
mr.Recycle = 1;
mr.Enabled = 1;
mr.VolBytes = 10000;
+ set_storageid_in_mr(store, &mr);
bstrncpy(mr.VolStatus, "Purged", sizeof(mr.VolStatus));
if (!db_get_media_ids(ua->jcr, ua->db, &mr, &nb, &results)) {
Dmsg0(100, "No results from db_get_media_ids\n");
* Loop over the candidate Volumes and actually truncate them
*/
for (int i=0; i < nb; i++) {
- memset(&mr, 0, sizeof(mr));
+ mr.clear();
mr.MediaId = results[i];
if (db_get_media_record(ua->jcr, ua->db, &mr)) {
/* TODO: ask for drive and change Pool */
strcmp(mr->VolStatus, "Used") == 0 ||
strcmp(mr->VolStatus, "Error") == 0) {
bstrncpy(mr->VolStatus, "Purged", sizeof(mr->VolStatus));
+ set_storageid_in_mr(NULL, mr);
if (!db_update_media_record(jcr, ua->db, mr)) {
return false;
}
pm_strcpy(jcr->VolumeName, mr->VolumeName);
generate_job_event(jcr, "VolumePurged");
- generate_plugin_event(jcr, bEventVolumePurged);
+ generate_plugin_event(jcr, bDirEventVolumePurged);
/*
* If the RecyclePool is defined, move the volume there
*/