/*
Bacula® - The Network Backup Solution
- Copyright (C) 2001-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2001-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.
if (bs->recv() <= 0) {
Emsg1(M_ERROR, 0, _("Connection request from %s failed.\n"), bs->who());
+ bmicrosleep(5, 0); /* make user wait 5 seconds */
bs->close();
return NULL;
}
if (bs->msglen < 25 || bs->msglen > (int)sizeof(name)) {
Dmsg1(000, "<filed: %s", bs->msg);
Emsg2(M_ERROR, 0, _("Invalid connection from %s. Len=%d\n"), bs->who(), bs->msglen);
+ bmicrosleep(5, 0); /* make user wait 5 seconds */
bs->close();
return NULL;
}
static bool setdebug_cmd(JCR *jcr)
{
BSOCK *dir = jcr->dir_bsock;
- int level, trace_flag;
+ int32_t level, trace_flag;
Dmsg1(10, "setdebug_cmd: %s", dir->msg);
if (sscanf(dir->msg, "setdebug=%d trace=%d", &level, &trace_flag) != 2 || level < 0) {
/*
* Cancel a Job
+ * Be careful, we switch to using the job's JCR! So, using
+ * BSOCKs on that jcr can have two threads in the same code.
*/
static bool cancel_cmd(JCR *cjcr)
{
dir->fsend(_("3904 Job %s not found.\n"), Job);
} else {
oldStatus = jcr->JobStatus;
- set_jcr_job_status(jcr, JS_Canceled);
+ jcr->setJobStatus(JS_Canceled);
Dmsg2(800, "Cancel JobId=%d %p\n", jcr->JobId, jcr);
if (!jcr->authenticated && oldStatus == JS_WaitFD) {
pthread_cond_signal(&jcr->job_start_wait); /* wake waiting thread */
}
if (jcr->file_bsock) {
- jcr->file_bsock->signal(BNET_TERMINATE);
jcr->file_bsock->set_terminated();
+ jcr->file_bsock->set_timed_out();
Dmsg2(800, "Term bsock jid=%d %p\n", jcr->JobId, jcr);
} else {
/* Still waiting for FD to connect, release it */
Dmsg1(100, "JobId=%u broadcast wait_device_release\n", (uint32_t)jcr->JobId);
pthread_cond_broadcast(&wait_device_release);
}
- Jmsg(jcr, M_INFO, 0, _("JobId=%d Job=\"%s\" marked to be canceled.\n"),
- (int)jcr->JobId, jcr->Job);
- dir->fsend(_("3000 Job %s marked to be canceled.\n"), jcr->Job);
+ dir->fsend(_("3000 JobId=%ld Job=\"%s\" marked to be canceled.\n"), jcr->JobId, jcr->Job);
free_jcr(jcr);
}
} else {
DCR *dcr;
DEVICE *dev;
bool ok = false;
- int slot;
- int drive;
+ int32_t slot, drive;
newname = get_memory(dir->msglen+1);
oldname = get_memory(dir->msglen+1);
BSOCK *dir = jcr->dir_bsock;
DEVICE *dev;
DCR *dcr;
- int drive;
- int slot = 0;
+ int32_t drive;
+ int32_t slot = 0;
bool ok;
ok = sscanf(dir->msg, "mount %127s drive=%d slot=%d", devname.c_str(),
if (!ok) {
ok = sscanf(dir->msg, "mount %127s drive=%d", devname.c_str(), &drive) == 2;
}
+ Dmsg3(100, "ok=%d drive=%d slot=%d\n", ok, drive, slot);
if (ok) {
dcr = find_device(jcr, devname, drive);
if (dcr) {
/* In both of these two cases, we (the user) unmounted the Volume */
case BST_UNMOUNTED_WAITING_FOR_SYSOP:
case BST_UNMOUNTED:
+ Dmsg2(100, "Unmounted changer=%d slot=%d\n", dev->is_autochanger(), slot);
if (dev->is_autochanger() && slot > 0) {
try_autoload_device(jcr, dcr, slot, "");
}
break;
case BST_NOT_BLOCKED:
+ Dmsg2(100, "Not blocked changer=%d slot=%d\n", dev->is_autochanger(), slot);
if (dev->is_autochanger() && slot > 0) {
try_autoload_device(jcr, dcr, slot, "");
}
BSOCK *dir = jcr->dir_bsock;
DEVICE *dev;
DCR *dcr;
- int drive;
+ int32_t drive;
if (sscanf(dir->msg, "unmount %127s drive=%d", devname.c_str(), &drive) == 2) {
dcr = find_device(jcr, devname, drive);
char devname[MAX_NAME_LENGTH];
char volumename[MAX_NAME_LENGTH];
- int action;
+ int32_t action;
/* TODO: Need to find a free device and ask for slot to the director */
if (sscanf(dir->msg,
BSOCK *dir = jcr->dir_bsock;
DEVICE *dev;
DCR *dcr;
- int drive;
+ int32_t drive;
if (sscanf(dir->msg, "release %127s drive=%d", devname.c_str(), &drive) == 2) {
dcr = find_device(jcr, devname, drive);
}
} else { /* error on scanf */
pm_strcpy(jcr->errmsg, dir->msg);
- dir->fsend(_("3908 Error scanning autocharger drives/list/slots command: %s\n"),
+ dir->fsend(_("3908 Error scanning autochanger drives/list/slots command: %s\n"),
jcr->errmsg);
}
dir->signal(BNET_EOD);
BSOCK *dir = jcr->dir_bsock;
DEVICE *dev;
DCR *dcr;
- int Slot;
- int drive;
+ int32_t Slot, drive;
if (sscanf(dir->msg, "readlabel %127s Slot=%d drive=%d", devname.c_str(),
&Slot, &drive) == 3) {
dir->fsend(_("3936 Device \"%s\" is busy reading.\n"),
dev->print_name());;
} else {
- dir->fsend(_("3937 Device \"%s\" is busy with %d writer(s).\n"),
- dev->print_name(), dev->num_writers);
+ dir->fsend(_("3937 Device \"%s\" is busy with writers=%d reserved=%d.\n"),
+ dev->print_name(), dev->num_writers, dev->num_reserved());
}
}