-/*
- *
- * Bacula Director -- msgchan.c -- handles the message channel
- * to the Storage daemon and the File daemon.
- *
- * Kern Sibbald, August MM
- *
- * This routine runs as a thread and must be thread reentrant.
- *
- * Basic tasks done here:
- * Open a message channel with the Storage daemon
- * to authenticate ourself and to pass the JobId.
- * Create a thread to interact with the Storage daemon
- * who returns a job status and requests Catalog services, etc.
- *
- * Version $Id$
- */
/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-20076 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.
*/
+/*
+ *
+ * Bacula Director -- msgchan.c -- handles the message channel
+ * to the Storage daemon and the File daemon.
+ *
+ * Kern Sibbald, August MM
+ *
+ * This routine runs as a thread and must be thread reentrant.
+ *
+ * Basic tasks done here:
+ * Open a message channel with the Storage daemon
+ * to authenticate ourself and to pass the JobId.
+ * Create a thread to interact with the Storage daemon
+ * who returns a job status and requests Catalog services, etc.
+ *
+ * Version $Id$
+ */
#include "bacula.h"
#include "dird.h"
{
BSOCK *sd;
STORE *store;
+ utime_t heart_beat;
if (jcr->store_bsock) {
return true; /* already connected */
store = jcr->rstore;
}
+ if (store->heartbeat_interval) {
+ heart_beat = store->heartbeat_interval;
+ } else {
+ heart_beat = director->heartbeat_interval;
+ }
+
/*
* Open message channel with the Storage daemon
*/
Dmsg2(100, "bnet_connect to Storage daemon %s:%d\n", store->address,
store->SDport);
- sd = bnet_connect(jcr, retry_interval, max_retry_time,
+ sd = bnet_connect(jcr, retry_interval, max_retry_time, heart_beat,
_("Storage daemon"), store->address,
NULL, store->SDport, verbose);
if (sd == NULL) {
return false;
}
sd = jcr->store_bsock;
- pm_strcpy(device_name, dev->hdr.name);
+ pm_strcpy(device_name, dev->name());
bash_spaces(device_name);
bnet_fsend(sd, query_device, device_name.c_str());
Dmsg1(100, ">stored: %s\n", sd->msg);
/*
* Now send JobId and permissions, and get back the authorization key.
*/
- pm_strcpy(job_name, jcr->job->hdr.name);
+ pm_strcpy(job_name, jcr->job->name());
bash_spaces(job_name);
- pm_strcpy(client_name, jcr->client->hdr.name);
+ pm_strcpy(client_name, jcr->client->name());
bash_spaces(client_name);
- pm_strcpy(fileset_name, jcr->fileset->hdr.name);
+ pm_strcpy(fileset_name, jcr->fileset->name());
bash_spaces(fileset_name);
if (jcr->fileset->MD5[0] == 0) {
bstrncpy(jcr->fileset->MD5, "**Dummy**", sizeof(jcr->fileset->MD5));
DEVICE *dev;
/* Loop over alternative storage Devices until one is OK */
foreach_alist(dev, storage->device) {
- pm_strcpy(device_name, dev->hdr.name);
+ pm_strcpy(device_name, dev->name());
bash_spaces(device_name);
bnet_fsend(sd, use_device, device_name.c_str());
Dmsg1(100, ">stored: %s", sd->msg);
DEVICE *dev;
/* Loop over alternative storage Devices until one is OK */
foreach_alist(dev, storage->device) {
- pm_strcpy(device_name, dev->hdr.name);
+ pm_strcpy(device_name, dev->name());
bash_spaces(device_name);
bnet_fsend(sd, use_device, device_name.c_str());
Dmsg1(100, ">stored: %s", sd->msg);
Dmsg0(100, "Start SD msg_thread.\n");
if ((status=pthread_create(&thid, NULL, msg_thread, (void *)jcr)) != 0) {
berrno be;
- Jmsg1(jcr, M_ABORT, 0, _("Cannot create message thread: %s\n"), be.strerror(status));
+ Jmsg1(jcr, M_ABORT, 0, _("Cannot create message thread: %s\n"), be.bstrerror(status));
}
/* Wait for thread to start */
while (jcr->SD_msg_chan == 0) {
pthread_cond_broadcast(&jcr->term_wait); /* wakeup any waiting threads */
Dmsg1(100, "=== End msg_thread. use=%d\n", jcr->use_count());
free_jcr(jcr); /* release jcr */
+ db_thread_cleanup(); /* remove thread specific data */
}
/*
V(mutex);
if (job_canceled(jcr)) {
if (jcr->SD_msg_chan) {
- jcr->store_bsock->timed_out = 1;
- jcr->store_bsock->terminated = 1;
+ jcr->store_bsock->m_timed_out = 1;
+ jcr->store_bsock->m_terminated = 1;
Dmsg2(400, "kill jobid=%d use=%d\n", (int)jcr->JobId, jcr->use_count());
pthread_kill(jcr->SD_msg_chan, TIMEOUT_SIGNAL);
}
LockRes();
foreach_res(dev, R_DEVICE) {
if (!update_device_res(jcr, dev)) {
- Dmsg1(900, "Error updating device=%s\n", dev->hdr.name);
+ Dmsg1(900, "Error updating device=%s\n", dev->name());
} else {
- Dmsg1(900, "Updated Device=%s\n", dev->hdr.name);
+ Dmsg1(900, "Updated Device=%s\n", dev->name());
}
}
UnlockRes();
Dmsg0(100, "Start Device thread.\n");
if ((status=pthread_create(&thid, NULL, device_thread, NULL)) != 0) {
berrno be;
- Jmsg1(NULL, M_ABORT, 0, _("Cannot create message thread: %s\n"), be.strerror(status));
+ Jmsg1(NULL, M_ABORT, 0, _("Cannot create message thread: %s\n"), be.bstrerror(status));
}
}
#endif