char ed1[100];
db_int64_ctx job, first, last;
int64_t val=0;
- POOL_MEM buf, tmp;
+ POOL_MEM buf, tmp, lasterr;
if (jcr->is_JobLevel(L_VIRTUAL_FULL)) {
return do_vbackup(jcr);
}
foreach_alist(store, jcr->store_mngr->get_wstore_list()) {
+ /* The idea is to display the error at the start of the loop
+ * doing so, the last error will be displayed as fatal if needed
+ */
+ if (strcmp(lasterr.c_str(), "") != 0) {
+ Jmsg(jcr, M_WARNING, 0, "%s", lasterr.c_str());
+ pm_strcpy(lasterr, "");
+ }
jcr->store_mngr->set_current_wstorage(store);
if (jcr->store_bsock) {
* Start conversation with Storage daemon
*/
if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
- Dmsg1(100, "Failed connect to the storage: %s\n", jcr->store_mngr->get_wstore()->name());
+ /* The message will be displayed as warning in the next
+ * iteration of the loop, or as fatal at the end of the
+ * foreach block
+ */
+ pm_strcpy(lasterr, jcr->errmsg);
continue;
+
} else {
Dmsg1(100, "Connected to the storage: %s\n", jcr->store_mngr->get_wstore()->name());
}
* because we have only 2 iterations (so 'iter' variable is either 0 or 1)
*/
if (!start_storage_daemon_job(jcr, NULL, &wlist, wstore_group ? (bool)iter : true)) {
- Dmsg1(100, "Failed to start job on the storage: %s\n", jcr->store_mngr->get_wstore()->name());
+ Mmsg(lasterr, _("Failed to start job on the storage: %s\n"),
+ jcr->store_mngr->get_wstore()->name());
continue;
} else {
sd_job_started = true;
}
if(!sd_job_started) {
- Jmsg(jcr, M_FATAL, 0, _("Failed to start job on any of the storages defined!\n"));
+ Jmsg(jcr, M_FATAL, 0, "%s", lasterr.c_str());
goto bail_out;
}
/* Print connection info only for real jobs */
build_connecting_info_log(_("Client"), jcr->client->name(),
- get_client_address(jcr, jcr->client, tmp.addr()), jcr->client->FDport,
+ get_client_address(jcr, jcr->client, tmp.addr()),
+ jcr->client->FDport,
fd->tls ? true : false, buf.addr());
Jmsg(jcr, M_INFO, 0, "%s", buf.c_str());
if (jcr->sd_calls_client) {
if (jcr->FDVersion < 10) {
- Jmsg(jcr, M_FATAL, 0, _("The File daemon does not support SDCallsClient.\n"));
+ Jmsg(jcr, M_FATAL, 0, _("[DE0011] The File daemon does not support SDCallsClient.\n"));
goto bail_out;
}
if (!send_client_addr_to_sd(jcr)) {
jcr->CommCompressedBytes = CommCompressedBytes;
jcr->Snapshot = VSS;
jcr->Encrypt = Encrypt;
+
} else if (!jcr->is_canceled()) {
- Jmsg(jcr, M_FATAL, 0, _("No Job status returned from FD. %c\n"), jcr->getJobStatus());
+ Jmsg(jcr, M_FATAL, 0, _("[DE0011] No Job status returned from FD\n"));
}
/* Return the first error status we find Dir, FD, or SD */
jcr->setJobStatus(JS_Running);
if (!authenticate_file_daemon(jcr, &status, &jcr->errmsg)) {
- Dmsg1(10, "Authentication error with FD. %s\n", jcr->errmsg);
return 0;
}
return true;
}
if (prtmsg == DISPLAY_ERROR) {
- Jmsg(jcr, M_FATAL, 0, _("Bad response to %s command: wanted %s, got %s\n"),
+ Jmsg(jcr, M_FATAL, 0, _("[DE0011] Bad response to %s command: wanted %s, got %s\n"),
cmd, resp, bs->msg);
}
return false;
}
- Jmsg(jcr, M_FATAL, 0, _("Socket error on %s command: ERR=%s\n"),
+ Jmsg(jcr, M_FATAL, 0, _("[DE0018] Socket error on %s command: ERR=%s\n"),
cmd, bs->bstrerror());
return false;
}
}
if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) {
- ua->error_msg(_("Failed to connect to Storage daemon.\n"));
+ ua->error_msg("%s", ua->jcr->errmsg);
return false;
}
}
if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) {
+ Jmsg(ua->jcr, M_ERROR, 0, "%s", ua->jcr->errmsg); /* TODO: Enhance, it's not always a job */
goto bail_out;
}
Dmsg0(200, "Connected to storage daemon\n");
*/
Dmsg0(200, "Connect to write (wjcr) storage daemon.\n");
if (!connect_to_storage_daemon(wjcr, 10, SDConnectTimeout, 1)) {
- Jmsg(jcr, M_FATAL, 0, _("Could not connect to write Storage Daemon \"%s\"\n"), wjcr->store_mngr->get_wstore()->name());
+ Jmsg(jcr, M_ERROR, 0, _("Could not connect to write Storage Daemon \"%s\"\n"), wjcr->store_mngr->get_wstore()->name());
+ Jmsg(jcr, M_FATAL, 0, "%s", wjcr->errmsg);
goto bail_out;
}
wsd = wjcr->store_bsock;
*/
Dmsg1(200, "Connect to read (jcr) storage daemon. Jid=%d\n", jcr->JobId);
if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
- Jmsg(jcr, M_FATAL, 0, _("Could not connect to read Storage Daemon \"%s\"\n"), jcr->store_mngr->get_rstore()->name());
+ Jmsg(jcr, M_ERROR, 0, _("Could not connect to read Storage Daemon \"%s\"\n"), jcr->store_mngr->get_rstore()->name());
+ Jmsg(jcr, M_FATAL, 0, "%s", wjcr->errmsg);
goto bail_out;
}
sd = jcr->store_bsock;
if (!is_bsock_open(ua->jcr->store_bsock)) {
ua->send_msg(_("Connecting to Storage daemon %s at %s:%d ...\n"),
store->name(), store->address, store->SDport);
- if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) {
- ua->error_msg(_("Failed to connect to Storage daemon.\n"));
+ if (!connect_to_storage_daemon(ua->jcr, 5, SDConnectTimeout, 0 /* No need to be verbose */)) {
+ ua->error_msg("%s", ua->jcr->errmsg);
+ free_bsock(ua->jcr->store_bsock);
return NULL;
}
}
* Start conversation with Storage daemon
*/
if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
+ Jmsg(jcr, M_FATAL, 0, "%s", jcr->errmsg);
goto bail_out;
}
sd = jcr->store_bsock;
ua->send_msg(_("Connecting to Storage daemon %s at %s:%d\n"),
store->name(), store->address, store->SDport);
if (!connect_to_storage_daemon(ua->jcr, 1, 15, 0)) {
- ua->error_msg(_("Failed to connect to Storage daemon.\n"));
- return;
+ ua->error_msg("%s", ua->jcr->errmsg);
+ goto bail_out;
}
Dmsg0(120, _("Connected to storage daemon\n"));
sd = ua->jcr->store_bsock;
ua->send_msg("%s", sd->msg);
}
sd->signal(BNET_TERMINATE);
+bail_out:
free_bsock(ua->jcr->store_bsock);
return;
}
Dmsg4(120, "Cmd: %s %s drive=%d slot=%d\n", command, dev_name, drive, slot);
if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
- ua->error_msg(_("Failed to connect to Storage daemon.\n"));
+ ua->error_msg("%s", jcr->errmsg);
goto bail_out;
}
ua->send_msg(_("Connecting to Storage daemon %s at %s:%d\n"),
store->name(), store->address, store->SDport);
if (!connect_to_storage_daemon(jcr, 1, 15, 0)) {
- ua->error_msg(_("Failed to connect to Storage daemon.\n"));
+ ua->error_msg("%s", jcr->errmsg);
goto bail_out;
}
Dmsg0(120, _("Connected to storage daemon\n"));
ustore.store->name(), ustore.store->address, ustore.store->SDport);
}
- if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
- ua->error_msg(_("Failed to connect to Storage.\n"));
+ if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 0 /* not verbose */)) {
+ ua->error_msg("%s", jcr->errmsg);
goto bail_out;
}
if (!ua->api) ua->send_msg(_("Connecting to Storage daemon %s at %s:%d\n"),
store->name(), store->address, store->SDport);
if (!connect_to_storage_daemon(ua->jcr, 1, 15, 0)) {
- ua->send_msg(_("\nFailed to connect to Storage daemon %s.\n====\n"),
- store->name());
+ ua->error_msg("%s", ua->jcr->errmsg);
free_bsock(ua->jcr->store_bsock);
return;
}
media_protect_list_handler, &list);
if (list.size() > 0) {
- ua->send_msg(_("Found %d volumes with status Used/Full that must be protected\n"), list.size());
+ ua->send_msg(_("Found %d volume(s) with status Used/Full that must be protected\n"), list.size());
} else {
ua->send_msg(_("No volume found to protect\n"));
free_bsock(ua->jcr->store_bsock);
sd = NULL;
}
-
- if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
- ua->error_msg(_("Failed to connect to Storage daemon.\n"));
+ ua->send_msg(_("Connecting to Storage %s at %s:%d\n"),
+ ustore.store->name(), ustore.store->address, ustore.store->SDport);
+ if (!connect_to_storage_daemon(jcr, 5, SDConnectTimeout, 0 /* not verbose */)) {
+ ua->error_msg("%s", jcr->errmsg);
ret = 0;
continue;
}
* Start conversation with Storage daemon
*/
if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
+ Jmsg(jcr, M_FATAL, 0, "%s", jcr->errmsg);
return false;
}
sd = jcr->store_bsock;
*/
jcr->setJobStatus(JS_Blocked);
if (!connect_to_storage_daemon(jcr, 10, SDConnectTimeout, 1)) {
+ Jmsg(jcr, M_FATAL, 0, "%s", jcr->errmsg);
return false;
}
/*