*/
/*
- Copyright (C) 2000-2003 Kern Sibbald and John Walker
+ Copyright (C) 2000-2004 Kern Sibbald and John Walker
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
}
memset(&rjr, 0, sizeof(rjr));
- jcr->jr.Level = 'F'; /* Full restore */
- jcr->jr.StartTime = jcr->start_time;
+ jcr->jr.JobLevel = L_FULL; /* Full restore */
if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) {
Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db));
restore_cleanup(jcr, JS_ErrorTerminated);
/*
* The following code is kept temporarily for compatibility.
* It is the predecessor to the Bootstrap file.
+ * DEPRECATED
*/
if (!jcr->RestoreBootstrap) {
/*
jcr->VolumeName[0] = 0;
if (!db_get_job_volume_names(jcr, jcr->db, rjr.JobId, &jcr->VolumeName) ||
jcr->VolumeName[0] == 0) {
- Jmsg(jcr, M_FATAL, 0, _("Cannot find Volume Name for restore Job %d. %s"),
+ Jmsg(jcr, M_FATAL, 0, _("Cannot find Volume names for restore Job %d. %s"),
rjr.JobId, db_strerror(jcr->db));
restore_cleanup(jcr, JS_ErrorTerminated);
return 0;
/* Send restore command */
char replace, *where;
-
+ char empty = '\0';
+
if (jcr->replace != 0) {
replace = jcr->replace;
} else if (jcr->job->replace != 0) {
} else if (jcr->job->RestoreWhere) {
where = jcr->job->RestoreWhere; /* no override take from job */
} else {
- where = ""; /* None */
+ where = ∅ /* None */
}
jcr->prefix_links = jcr->job->PrefixLinks;
bash_spaces(where);
static void restore_cleanup(JCR *jcr, int TermCode)
{
char sdt[MAX_TIME_LENGTH], edt[MAX_TIME_LENGTH];
- char ec1[30], ec2[30];
+ char ec1[30], ec2[30], ec3[30];
char term_code[100], fd_term_msg[100], sd_term_msg[100];
- char *term_msg;
+ const char *term_msg;
int msg_type;
double kbps;
Dmsg0(20, "In restore_cleanup\n");
+ dequeue_messages(jcr); /* display any queued messages */
set_jcr_job_status(jcr, TermCode);
update_job_end_record(jcr);
msg_type = M_INFO; /* by default INFO message */
switch (TermCode) {
case JS_Terminated:
- term_msg = _("Restore OK");
+ if (jcr->ExpectedFiles > jcr->jr.JobFiles) {
+ term_msg = _("Restore OK -- warning file count mismatch");
+ } else {
+ term_msg = _("Restore OK");
+ }
break;
case JS_FatalError:
case JS_ErrorTerminated:
msg_type = M_ERROR; /* Generate error message */
if (jcr->store_bsock) {
bnet_sig(jcr->store_bsock, BNET_TERMINATE);
- pthread_cancel(jcr->SD_msg_chan);
+ if (jcr->SD_msg_chan) {
+ pthread_cancel(jcr->SD_msg_chan);
+ }
}
break;
case JS_Canceled:
term_msg = _("Restore Canceled");
if (jcr->store_bsock) {
bnet_sig(jcr->store_bsock, BNET_TERMINATE);
- pthread_cancel(jcr->SD_msg_chan);
+ if (jcr->SD_msg_chan) {
+ pthread_cancel(jcr->SD_msg_chan);
+ }
}
break;
default:
Client: %s\n\
Start time: %s\n\
End time: %s\n\
+Files Expected: %s\n\
Files Restored: %s\n\
Bytes Restored: %s\n\
Rate: %.1f KB/s\n\
-Non-fatal FD Errors: %d\n\
+FD Errors: %d\n\
FD termination status: %s\n\
SD termination status: %s\n\
Termination: %s\n\n"),
jcr->client->hdr.name,
sdt,
edt,
- edit_uint64_with_commas((uint64_t)jcr->jr.JobFiles, ec1),
- edit_uint64_with_commas(jcr->jr.JobBytes, ec2),
+ edit_uint64_with_commas((uint64_t)jcr->ExpectedFiles, ec1),
+ edit_uint64_with_commas((uint64_t)jcr->jr.JobFiles, ec2),
+ edit_uint64_with_commas(jcr->jr.JobBytes, ec3),
(float)kbps,
jcr->Errors,
fd_term_msg,