/*
Bacula® - The Network Backup Solution
- Copyright (C) 2003-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2003-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.
*
* Kern Sibbald, April MMIII
*
- * Version $Id$
*/
#include "bacula.h"
return true;
bail_out:
+ Dmsg1(100, "Problem with user selection ERR=%s\n", msg);
return false;
}
Dmsg2(100, "Got Vol=%s from SD for Slot=%d\n", vl->VolName, vl->Slot);
}
slot_list[vl->Slot] = 0; /* clear Slot */
- memset(&mr, 0, sizeof(mr));
mr.Slot = vl->Slot;
mr.InChanger = 1;
- mr.StorageId = store.store->StorageId;
- /* Set InChanger to zero for this Slot */
+ mr.MediaId = 0; /* Force using VolumeName */
+ if (vl->VolName) {
+ bstrncpy(mr.VolumeName, vl->VolName, sizeof(mr.VolumeName));
+ } else {
+ mr.VolumeName[0] = 0;
+ }
+ set_storageid_in_mr(store.store, &mr);
+ Dmsg4(100, "Before make unique: Vol=%s slot=%d inchanger=%d sid=%d\n",
+ mr.VolumeName, mr.Slot, mr.InChanger, mr.StorageId);
db_lock(ua->db);
+ /* Set InChanger to zero for this Slot */
db_make_inchanger_unique(ua->jcr, ua->db, &mr);
db_unlock(ua->db);
+ Dmsg4(100, "After make unique: Vol=%s slot=%d inchanger=%d sid=%d\n",
+ mr.VolumeName, mr.Slot, mr.InChanger, mr.StorageId);
if (!vl->VolName) {
Dmsg1(100, "No VolName for Slot=%d setting InChanger to zero.\n", vl->Slot);
ua->info_msg(_("No VolName for Slot=%d InChanger set to zero.\n"), vl->Slot);
continue;
}
- memset(&mr, 0, sizeof(mr));
- bstrncpy(mr.VolumeName, vl->VolName, sizeof(mr.VolumeName));
db_lock(ua->db);
+ Dmsg4(100, "Before get MR: Vol=%s slot=%d inchanger=%d sid=%d\n",
+ mr.VolumeName, mr.Slot, mr.InChanger, mr.StorageId);
if (db_get_media_record(ua->jcr, ua->db, &mr)) {
+ Dmsg4(100, "After get MR: Vol=%s slot=%d inchanger=%d sid=%d\n",
+ mr.VolumeName, mr.Slot, mr.InChanger, mr.StorageId);
+ /* If Slot, Inchanger, and StorageId have changed, update the Media record */
if (mr.Slot != vl->Slot || !mr.InChanger || mr.StorageId != store.store->StorageId) {
mr.Slot = vl->Slot;
mr.InChanger = 1;
- mr.StorageId = store.store->StorageId;
if (have_enabled) {
mr.Enabled = Enabled;
}
+ set_storageid_in_mr(store.store, &mr);
if (!db_update_media_record(ua->jcr, ua->db, &mr)) {
ua->error_msg("%s", db_strerror(ua->db));
} else {
}
db_unlock(ua->db);
}
- memset(&mr, 0, sizeof(mr));
+ mr.clear();
mr.InChanger = 1;
- mr.StorageId = store.store->StorageId;
+ set_storageid_in_mr(store.store, &mr);
db_lock(ua->db);
for (int i=1; i <= max_slots; i++) {
if (slot_list[i]) {
/* Check for oldvolume=name */
i = find_arg_with_value(ua, "oldvolume");
if (i >= 0) {
- memset(&omr, 0, sizeof(omr));
bstrncpy(omr.VolumeName, ua->argv[i], sizeof(omr.VolumeName));
if (db_get_media_record(ua->jcr, ua->db, &omr)) {
goto checkVol;
continue;
}
- memset(&mr, 0, sizeof(mr));
bstrncpy(mr.VolumeName, ua->cmd, sizeof(mr.VolumeName));
/* If VolBytes are zero the Volume is not labeled */
if (db_get_media_record(ua->jcr, ua->db, &mr)) {
}
mr.InChanger = mr.Slot > 0; /* if slot give assume in changer */
}
- mr.StorageId = store.store->StorageId;
+ set_storageid_in_mr(store.store, &mr);
bstrncpy(mr.MediaType, store.store->media_type, sizeof(mr.MediaType));
if (!select_pool_dbr(ua, &pr)) {
goto bail_out;
}
- memset(&omr, 0, sizeof(omr));
/* Fire off the label requests */
for (vl=vol_list; vl; vl=vl->next) {
if (!vl->VolName || !slot_list[vl->Slot]) {
continue;
}
- memset(&mr, 0, sizeof(mr));
+ mr.clear();
bstrncpy(mr.VolumeName, vl->VolName, sizeof(mr.VolumeName));
media_record_exists = false;
if (db_get_media_record(ua->jcr, ua->db, &mr)) {
vl->Slot, mr.VolumeName);
mr.Slot = vl->Slot;
mr.InChanger = mr.Slot > 0; /* if slot give assume in changer */
- mr.StorageId = store->StorageId;
+ set_storageid_in_mr(store, &mr);
if (!db_update_media_record(ua->jcr, ua->db, &mr)) {
ua->error_msg(_("Error setting InChanger: ERR=%s"), db_strerror(ua->db));
}
media_record_exists = true;
}
mr.InChanger = mr.Slot > 0; /* if slot give assume in changer */
- mr.StorageId = store->StorageId;
+ set_storageid_in_mr(store, &mr);
/*
* Deal with creating cleaning tape here. Normal tapes created in
* send_label_request() below
mr.VolBytes = 1; /* any bytes to indicate it exists */
bstrncpy(mr.VolStatus, "Cleaning", sizeof(mr.VolStatus));
mr.MediaType[0] = 0;
- mr.StorageId = store->StorageId;
+ set_storageid_in_mr(store, &mr);
if (!db_update_media_record(ua->jcr, ua->db, &mr)) {
ua->error_msg("%s", db_strerror(ua->db));
}
set_pool_dbr_defaults_in_media_dbr(&mr, &pr);
bstrncpy(mr.VolStatus, "Cleaning", sizeof(mr.VolStatus));
mr.MediaType[0] = 0;
+ set_storageid_in_mr(store, &mr);
if (db_create_media_record(ua->jcr, ua->db, &mr)) {
ua->send_msg(_("Catalog record for cleaning tape \"%s\" successfully created.\n"),
mr.VolumeName);
if (media_record_exists) { /* we update it */
mr->VolBytes = VolBytes;
mr->InChanger = mr->Slot > 0; /* if slot give assume in changer */
- mr->StorageId = ua->jcr->wstore->StorageId;
+ set_storageid_in_mr(ua->jcr->wstore, mr);
if (!db_update_media_record(ua->jcr, ua->db, mr)) {
ua->error_msg("%s", db_strerror(ua->db));
ok = false;
set_pool_dbr_defaults_in_media_dbr(mr, pr);
mr->VolBytes = VolBytes;
mr->InChanger = mr->Slot > 0; /* if slot give assume in changer */
- mr->StorageId = ua->jcr->wstore->StorageId;
mr->Enabled = 1;
+ set_storageid_in_mr(ua->jcr->wstore, mr);
if (db_create_media_record(ua->jcr, ua->db, mr)) {
ua->info_msg(_("Catalog record for Volume \"%s\", Slot %d successfully created.\n"),
mr->VolumeName, mr->Slot);
const char *slot_api_empty_format="%c|%i||||||||\n";
if (is_volume_name_legal(NULL, vol_name)) {
- memset(&mr, 0, sizeof(mr));
bstrncpy(mr.VolumeName, vol_name, sizeof(mr.VolumeName));
if (db_get_media_record(ua->jcr, ua->db, &mr)) {
memset(&pr, 0, sizeof(POOL_DBR));
MEDIA_DBR mr;
char *slot_list;
int max_slots;
- int drive;
int i=1;
/* Slot | Volume | Status | MediaType | Pool */
const char *slot_hformat=" %4i%c| %16s | %9s | %20s | %18s |\n";
pm_strcpy(store.store_source, _("command line"));
set_wstorage(ua->jcr, &store);
- drive = get_storage_drive(ua, store.store);
+ get_storage_drive(ua, store.store);
max_slots = get_num_slots_from_SD(ua);
}
}
- memset(&mr, 0, sizeof(mr));
bstrncpy(mr.VolumeName, vl->VolName, sizeof(mr.VolumeName));
db_lock(ua->db);
if (mr.VolumeName[0] && db_get_media_record(ua->jcr, ua->db, &mr)) {