X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fappend.c;h=1af03fb822624758c2b9028a27d7766300760fa1;hb=8ec628bc2c18b136d3496203ebd9fa1a0cdc50d5;hp=f9224b1092650f70ecb17e4a327f40b63fc15bca;hpb=c33bdc833cca316aca008c53560612824693c1c9;p=bacula%2Fbacula diff --git a/bacula/src/stored/append.c b/bacula/src/stored/append.c index f9224b1092..1af03fb822 100644 --- a/bacula/src/stored/append.c +++ b/bacula/src/stored/append.c @@ -43,23 +43,9 @@ static char OK_append[] = "3000 OK append data\n"; /* - * Check if we can mark this job incomplete - * */ void possible_incomplete_job(JCR *jcr, int32_t last_file_index) { - /* - * Note, here we decide if it is worthwhile to restart - * the Job at this point. For the moment, if at least - * 10 Files have been seen, which is good for testing, but - * for a production system, we probably want something like - * 100-1000 files, and some number of bytes of data. - * - * ****FIXME**** update this - */ - if (last_file_index > 10) { - jcr->setJobStatus(JS_Incomplete); - } } /* * Append Data sent from File daemon @@ -93,17 +79,17 @@ bool do_append_data(JCR *jcr) memset(&rec, 0, sizeof(rec)); if (!fd->set_buffer_size(dcr->device->max_network_buffer_size, BNET_SETBUF_WRITE)) { - set_jcr_job_status(jcr, JS_ErrorTerminated); + jcr->setJobStatus(JS_ErrorTerminated); Jmsg0(jcr, M_FATAL, 0, _("Unable to set network buffer size.\n")); return false; } if (!acquire_device_for_append(dcr)) { - set_jcr_job_status(jcr, JS_ErrorTerminated); + jcr->setJobStatus(JS_ErrorTerminated); return false; } - set_jcr_job_status(jcr, JS_Running); + jcr->setJobStatus(JS_Running); dir_send_job_status(jcr); if (dev->VolCatInfo.VolCatName[0] == 0) { @@ -124,7 +110,7 @@ bool do_append_data(JCR *jcr) if (!write_session_label(dcr, SOS_LABEL)) { Jmsg1(jcr, M_FATAL, 0, _("Write session label failed. ERR=%s\n"), dev->bstrerror()); - set_jcr_job_status(jcr, JS_ErrorTerminated); + jcr->setJobStatus(JS_ErrorTerminated); ok = false; } if (dev->VolCatInfo.VolCatName[0] == 0) { @@ -181,6 +167,7 @@ bool do_append_data(JCR *jcr) if (sscanf(fd->msg, "%ld %ld", &file_index, &stream) != 2) { Jmsg1(jcr, M_FATAL, 0, _("Malformed data header from FD: %s\n"), fd->msg); ok = false; + possible_incomplete_job(jcr, last_file_index); break; } @@ -191,7 +178,7 @@ bool do_append_data(JCR *jcr) * An incomplete job can start the file_index at any number. * otherwise, it must start at 1. */ - if (jcr->incomplete && file_index > 0 && last_file_index == 0) { + if (jcr->rerunning && file_index > 0 && last_file_index == 0) { goto fi_checked; } if (file_index > 0 && (file_index == last_file_index || @@ -264,7 +251,7 @@ fi_checked: } /* Create Job status for end of session label */ - set_jcr_job_status(jcr, ok?JS_Terminated:JS_ErrorTerminated); + jcr->setJobStatus(ok?JS_Terminated:JS_ErrorTerminated); if (ok) { /* Terminate connection with FD */ @@ -301,8 +288,9 @@ fi_checked: if (ok && !jcr->is_job_canceled()) { Jmsg1(jcr, M_FATAL, 0, _("Error writing end session label. ERR=%s\n"), dev->bstrerror()); + possible_incomplete_job(jcr, last_file_index); } - set_jcr_job_status(jcr, JS_ErrorTerminated); + jcr->setJobStatus(JS_ErrorTerminated); ok = false; } if (dev->VolCatInfo.VolCatName[0] == 0) { @@ -317,18 +305,15 @@ fi_checked: Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"), dev->print_name(), dev->bstrerror()); Dmsg0(100, _("Set ok=FALSE after write_block_to_device.\n")); + possible_incomplete_job(jcr, last_file_index); } - set_jcr_job_status(jcr, JS_ErrorTerminated); + jcr->setJobStatus(JS_ErrorTerminated); ok = false; } - if (dev->VolCatInfo.VolCatName[0] == 0) { - Pmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); - Dmsg0(000, _("NULL Volume name. This shouldn't happen!!!\n")); - } } - if (!ok && (jcr->getJobStatus() != JS_Incomplete)) { + if (!ok && !jcr->is_JobStatus(JS_Incomplete)) { discard_data_spool(dcr); } else { /* Note: if commit is OK, the device will remain blocked */ @@ -345,7 +330,7 @@ fi_checked: */ release_device(dcr); - if ((!ok || jcr->is_job_canceled()) && (jcr->getJobStatus() != JS_Incomplete)) { + if ((!ok || jcr->is_job_canceled()) && !jcr->is_JobStatus(JS_Incomplete)) { discard_attribute_spool(jcr); } else { commit_attribute_spool(jcr);