-/*
- *
- * Routines for handling the autochanger.
- *
- * Kern Sibbald, August MMII
- *
- * Version $Id$
- */
/*
Bacula® - The Network Backup Solution
- Copyright (C) 2002-2006 Free Software Foundation Europe e.V.
+ Copyright (C) 2002-2007 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.
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
*/
+/*
+ *
+ * Routines for handling the autochanger.
+ *
+ * Kern Sibbald, August MMII
+ *
+ * Version $Id$
+ */
#include "bacula.h" /* pull in global headers */
#include "stored.h" /* pull in Storage Deamon headers */
changer = get_pool_memory(PM_FNAME);
if (slot <= 0) {
- Jmsg(jcr, M_INFO, 0, _("Invalid slot=%d defined, cannot autoload Volume.\n"), slot);
+ Jmsg(jcr, M_INFO, 0, _("Invalid slot=%d defined in catalog. Manual load my be required.\n"), slot);
rtn_stat = 0;
} else if (!dcr->device->changer_name) {
- Jmsg(jcr, M_INFO, 0, _("No \"Changer Device\" given cannot autoload Volume.\n"));
+ Jmsg(jcr, M_INFO, 0, _("No \"Changer Device\" manual load of Volume may be required.\n"));
rtn_stat = 0;
} else if (!dcr->device->changer_command) {
- Jmsg(jcr, M_INFO, 0, _("No \"Changer Command\" given cannot autoload Volume.\n"));
+ Jmsg(jcr, M_INFO, 0, _("No \"Changer Command\" manual load of Volume may be requird.\n"));
rtn_stat = 0;
} else {
/* Attempt to load the Volume */
*results.c_str() = 0;
Dmsg1(100, "Run program=%s\n", changer);
status = run_program_full_output(changer, timeout, results.c_str());
- Dmsg3(100, "run_prog: %s stat=%d result=%s\n", changer, status, results.c_str());
+ Dmsg3(100, "run_prog: %s stat=%d result=%s", changer, status, results.c_str());
if (status == 0) {
loaded = str_to_int32(results.c_str());
if (loaded > 0) {
AUTOCHANGER *changer = dcr->dev->device->changer_res;
DEVRES *device;
bool found = false;
- bool first = true;
+ int retries = 0; /* wait for device retries */
if (!changer) {
return false;
}
for (int i=0; i < 3; i++) {
if (dev->is_busy()) {
- wait_for_device(dcr->jcr, first);
- first = false;
+ wait_for_device(dcr->jcr, retries);
continue;
}
break;
}
- dev->lock();
+ dev->dlock();
if (dev->is_busy()) {
Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" is in use by device %s\n"),
dcr->VolumeName, dev->print_name());
Dmsg4(100, "Vol %s for dev=%s is busy dev=%s slot=%d\n",
dcr->VolumeName, dcr->dev->print_name(), dev->print_name(), slot);
Dmsg2(100, "num_writ=%d reserv=%d\n", dev->num_writers, dev->reserved_device);
- dev->unlock();
+ dev->dunlock();
return false;
}
Dmsg0(100, "Slot unloaded\n");
}
unlock_changer(dcr);
- dev->unlock();
+ dev->dunlock();
free_pool_memory(changer_cmd);
return ok;
}