-/*
- *
- * 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) {
" Storage daemon didn't accept Device \"%s\" command.\n"),
device_name.c_str());
}
+ } else {
+ Jmsg(jcr, M_INFO, 0, _("Using Device \"%s\"\n"), device_name.c_str());
}
return ok;
}
* Start a thread to handle Storage daemon messages and
* Catalog requests.
*/
-int start_storage_daemon_message_thread(JCR *jcr)
+bool start_storage_daemon_message_thread(JCR *jcr)
{
int status;
pthread_t thid;
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) {
bmicrosleep(0, 50);
+ if (job_canceled(jcr) || jcr->sd_msg_thread_done) {
+ return false;
+ }
}
Dmsg1(100, "SD msg_thread started. use=%d\n", jcr->use_count());
- return 1;
+ return true;
}
extern "C" void msg_thread_cleanup(void *arg)
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