Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bareos/bareos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/stored/mac.cc')
-rw-r--r--core/src/stored/mac.cc154
1 files changed, 79 insertions, 75 deletions
diff --git a/core/src/stored/mac.cc b/core/src/stored/mac.cc
index 52936d1a6..0d68bbb4f 100644
--- a/core/src/stored/mac.cc
+++ b/core/src/stored/mac.cc
@@ -35,7 +35,7 @@
#include "stored/append.h"
#include "stored/device.h"
#include "stored/device_control_record.h"
-#include "stored/jcr_private.h"
+#include "stored/stored_jcr_impl.h"
#include "stored/label.h"
#include "stored/mount.h"
#include "stored/read_record.h"
@@ -113,7 +113,7 @@ static bool CloneRecordInternally(DeviceControlRecord* dcr, DeviceRecord* rec)
bool retval = false;
bool translated_record = false;
JobControlRecord* jcr = dcr->jcr;
- Device* dev = jcr->impl->dcr->dev;
+ Device* dev = jcr->sd_impl->dcr->dev;
char buf1[100], buf2[100];
/*
@@ -139,10 +139,10 @@ static bool CloneRecordInternally(DeviceControlRecord* dcr, DeviceRecord* rec)
if (jcr->is_JobType(JT_MIGRATE) || jcr->is_JobType(JT_COPY)) {
bstrncpy(jcr->Job, label->Job, sizeof(jcr->Job));
- PmStrcpy(jcr->impl->job_name, label->JobName);
+ PmStrcpy(jcr->sd_impl->job_name, label->JobName);
PmStrcpy(jcr->client_name, label->ClientName);
- PmStrcpy(jcr->impl->fileset_name, label->FileSetName);
- PmStrcpy(jcr->impl->fileset_md5, label->FileSetMD5);
+ PmStrcpy(jcr->sd_impl->fileset_name, label->FileSetName);
+ PmStrcpy(jcr->sd_impl->fileset_md5, label->FileSetMD5);
}
jcr->setJobType(label->JobType);
jcr->setJobLevel(label->JobLevel);
@@ -155,7 +155,7 @@ static bool CloneRecordInternally(DeviceControlRecord* dcr, DeviceRecord* rec)
jcr->start_time = jcr->sched_time;
/* write the SOS Label with the existing timestamp infos */
- if (!WriteSessionLabel(jcr->impl->dcr, SOS_LABEL)) {
+ if (!WriteSessionLabel(jcr->sd_impl->dcr, SOS_LABEL)) {
Jmsg1(jcr, M_FATAL, 0, _("Write session label failed. ERR=%s\n"),
dev->bstrerror());
jcr->setJobStatusWithPriorityCheck(JS_ErrorTerminated);
@@ -201,9 +201,10 @@ static bool CloneRecordInternally(DeviceControlRecord* dcr, DeviceRecord* rec)
stream_to_ascii(buf2, rec->Stream, rec->FileIndex), rec->data_len);
// Perform record translations.
- jcr->impl->dcr->before_rec = rec;
- jcr->impl->dcr->after_rec = NULL;
- if (GeneratePluginEvent(jcr, bSdEventWriteRecordTranslation, jcr->impl->dcr)
+ jcr->sd_impl->dcr->before_rec = rec;
+ jcr->sd_impl->dcr->after_rec = NULL;
+ if (GeneratePluginEvent(jcr, bSdEventWriteRecordTranslation,
+ jcr->sd_impl->dcr)
!= bRC_OK) {
goto bail_out;
}
@@ -214,17 +215,17 @@ static bool CloneRecordInternally(DeviceControlRecord* dcr, DeviceRecord* rec)
* taken place we just point the after_rec pointer to same DeviceRecord as in
* the before_rec pointer.
*/
- if (!jcr->impl->dcr->after_rec) {
- jcr->impl->dcr->after_rec = jcr->impl->dcr->before_rec;
+ if (!jcr->sd_impl->dcr->after_rec) {
+ jcr->sd_impl->dcr->after_rec = jcr->sd_impl->dcr->before_rec;
} else {
translated_record = true;
}
- while (!WriteRecordToBlock(jcr->impl->dcr, jcr->impl->dcr->after_rec)) {
+ while (!WriteRecordToBlock(jcr->sd_impl->dcr, jcr->sd_impl->dcr->after_rec)) {
Dmsg4(200, "!WriteRecordToBlock blkpos=%u:%u len=%d rem=%d\n", dev->file,
- dev->block_num, jcr->impl->dcr->after_rec->data_len,
- jcr->impl->dcr->after_rec->remainder);
- if (!jcr->impl->dcr->WriteBlockToDevice()) {
+ dev->block_num, jcr->sd_impl->dcr->after_rec->data_len,
+ jcr->sd_impl->dcr->after_rec->remainder);
+ if (!jcr->sd_impl->dcr->WriteBlockToDevice()) {
Dmsg2(90, "Got WriteBlockToDev error on device %s. %s\n",
dev->print_name(), dev->bstrerror());
Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"),
@@ -235,36 +236,36 @@ static bool CloneRecordInternally(DeviceControlRecord* dcr, DeviceRecord* rec)
}
// Restore packet
- jcr->impl->dcr->after_rec->VolSessionId
- = jcr->impl->dcr->after_rec->last_VolSessionId;
- jcr->impl->dcr->after_rec->VolSessionTime
- = jcr->impl->dcr->after_rec->last_VolSessionTime;
+ jcr->sd_impl->dcr->after_rec->VolSessionId
+ = jcr->sd_impl->dcr->after_rec->last_VolSessionId;
+ jcr->sd_impl->dcr->after_rec->VolSessionTime
+ = jcr->sd_impl->dcr->after_rec->last_VolSessionTime;
- if (jcr->impl->dcr->after_rec->FileIndex < 0) {
+ if (jcr->sd_impl->dcr->after_rec->FileIndex < 0) {
retval = true; /* don't send LABELs to Dir */
goto bail_out;
}
- jcr->JobBytes
- += jcr->impl->dcr->after_rec->data_len; /* increment bytes of this job */
+ jcr->JobBytes += jcr->sd_impl->dcr->after_rec
+ ->data_len; /* increment bytes of this job */
Dmsg5(500, "wrote_record JobId=%d FI=%s SessId=%d Strm=%s len=%d\n",
- jcr->JobId, FI_to_ascii(buf1, jcr->impl->dcr->after_rec->FileIndex),
- jcr->impl->dcr->after_rec->VolSessionId,
- stream_to_ascii(buf2, jcr->impl->dcr->after_rec->Stream,
- jcr->impl->dcr->after_rec->FileIndex),
- jcr->impl->dcr->after_rec->data_len);
-
- if (IsAttribute(jcr->impl->dcr->after_rec)) {
- SendAttrsToDir(jcr, jcr->impl->dcr->after_rec);
+ jcr->JobId, FI_to_ascii(buf1, jcr->sd_impl->dcr->after_rec->FileIndex),
+ jcr->sd_impl->dcr->after_rec->VolSessionId,
+ stream_to_ascii(buf2, jcr->sd_impl->dcr->after_rec->Stream,
+ jcr->sd_impl->dcr->after_rec->FileIndex),
+ jcr->sd_impl->dcr->after_rec->data_len);
+
+ if (IsAttribute(jcr->sd_impl->dcr->after_rec)) {
+ SendAttrsToDir(jcr, jcr->sd_impl->dcr->after_rec);
}
retval = true;
bail_out:
if (translated_record) {
- FreeRecord(jcr->impl->dcr->after_rec);
- jcr->impl->dcr->after_rec = NULL;
+ FreeRecord(jcr->sd_impl->dcr->after_rec);
+ jcr->sd_impl->dcr->after_rec = NULL;
}
return retval;
@@ -393,22 +394,22 @@ static inline void CheckAutoXflation(JobControlRecord* jcr)
if (me->autoxflateonreplication) { return; }
// Check autodeflation.
- switch (jcr->impl->read_dcr->autodeflate) {
+ switch (jcr->sd_impl->read_dcr->autodeflate) {
case AutoXflateMode::IO_DIRECTION_IN:
case AutoXflateMode::IO_DIRECTION_INOUT:
Dmsg0(200, "Clearing autodeflate on read_dcr\n");
- jcr->impl->read_dcr->autodeflate = AutoXflateMode::IO_DIRECTION_NONE;
+ jcr->sd_impl->read_dcr->autodeflate = AutoXflateMode::IO_DIRECTION_NONE;
break;
default:
break;
}
- if (jcr->impl->dcr) {
- switch (jcr->impl->dcr->autodeflate) {
+ if (jcr->sd_impl->dcr) {
+ switch (jcr->sd_impl->dcr->autodeflate) {
case AutoXflateMode::IO_DIRECTION_OUT:
case AutoXflateMode::IO_DIRECTION_INOUT:
Dmsg0(200, "Clearing autodeflate on write dcr\n");
- jcr->impl->dcr->autodeflate = AutoXflateMode::IO_DIRECTION_NONE;
+ jcr->sd_impl->dcr->autodeflate = AutoXflateMode::IO_DIRECTION_NONE;
break;
default:
break;
@@ -416,22 +417,22 @@ static inline void CheckAutoXflation(JobControlRecord* jcr)
}
// Check autoinflation.
- switch (jcr->impl->read_dcr->autoinflate) {
+ switch (jcr->sd_impl->read_dcr->autoinflate) {
case AutoXflateMode::IO_DIRECTION_IN:
case AutoXflateMode::IO_DIRECTION_INOUT:
Dmsg0(200, "Clearing autoinflate on read_dcr\n");
- jcr->impl->read_dcr->autoinflate = AutoXflateMode::IO_DIRECTION_NONE;
+ jcr->sd_impl->read_dcr->autoinflate = AutoXflateMode::IO_DIRECTION_NONE;
break;
default:
break;
}
- if (jcr->impl->dcr) {
- switch (jcr->impl->dcr->autoinflate) {
+ if (jcr->sd_impl->dcr) {
+ switch (jcr->sd_impl->dcr->autoinflate) {
case AutoXflateMode::IO_DIRECTION_OUT:
case AutoXflateMode::IO_DIRECTION_INOUT:
Dmsg0(200, "Clearing autoinflate on write dcr\n");
- jcr->impl->dcr->autoinflate = AutoXflateMode::IO_DIRECTION_NONE;
+ jcr->sd_impl->dcr->autoinflate = AutoXflateMode::IO_DIRECTION_NONE;
break;
default:
break;
@@ -448,7 +449,7 @@ bool DoMacRun(JobControlRecord* jcr)
bool ok = true;
bool acquire_fail = false;
BareosSocket* dir = jcr->dir_bsock;
- Device* dev = jcr->impl->dcr->dev;
+ Device* dev = jcr->sd_impl->dcr->dev;
switch (jcr->getJobType()) {
case JT_MIGRATE:
@@ -470,7 +471,7 @@ bool DoMacRun(JobControlRecord* jcr)
Dmsg0(20, "Start read data.\n");
- if (jcr->impl->NumReadVolumes == 0) {
+ if (jcr->sd_impl->NumReadVolumes == 0) {
Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type);
goto bail_out;
}
@@ -479,27 +480,29 @@ bool DoMacRun(JobControlRecord* jcr)
CheckAutoXflation(jcr);
// See if we perform both read and write or read only.
- if (jcr->impl->remote_replicate) {
+ if (jcr->sd_impl->remote_replicate) {
BareosSocket* sd;
- if (!jcr->impl->read_dcr) {
+ if (!jcr->sd_impl->read_dcr) {
Jmsg(jcr, M_FATAL, 0, _("Read device not properly initialized.\n"));
goto bail_out;
}
- Dmsg1(100, "read_dcr=%p\n", jcr->impl->read_dcr);
+ Dmsg1(100, "read_dcr=%p\n", jcr->sd_impl->read_dcr);
Dmsg3(200, "Found %d volumes names for %s. First=%s\n",
- jcr->impl->NumReadVolumes, Type, jcr->impl->VolList->VolumeName);
+ jcr->sd_impl->NumReadVolumes, Type,
+ jcr->sd_impl->VolList->VolumeName);
// Ready devices for reading.
- if (!AcquireDeviceForRead(jcr->impl->read_dcr)) {
+ if (!AcquireDeviceForRead(jcr->sd_impl->read_dcr)) {
ok = false;
acquire_fail = true;
goto bail_out;
}
Dmsg2(200, "===== After acquire pos %u:%u\n",
- jcr->impl->read_dcr->dev->file, jcr->impl->read_dcr->dev->block_num);
+ jcr->sd_impl->read_dcr->dev->file,
+ jcr->sd_impl->read_dcr->dev->block_num);
jcr->sendJobStatus(JS_Running);
@@ -518,12 +521,12 @@ bool DoMacRun(JobControlRecord* jcr)
// Expect to receive back the Ticket number.
if (BgetMsg(sd) >= 0) {
Dmsg1(110, "<stored: %s", sd->msg);
- if (sscanf(sd->msg, OK_start_replicate, &jcr->impl->Ticket) != 1) {
+ if (sscanf(sd->msg, OK_start_replicate, &jcr->sd_impl->Ticket) != 1) {
Jmsg(jcr, M_FATAL, 0, _("Bad response to start replicate: %s\n"),
sd->msg);
goto bail_out;
}
- Dmsg1(110, "Got Ticket=%d\n", jcr->impl->Ticket);
+ Dmsg1(110, "Got Ticket=%d\n", jcr->sd_impl->Ticket);
} else {
Jmsg(jcr, M_FATAL, 0,
_("Bad response from stored to start replicate command\n"));
@@ -531,7 +534,7 @@ bool DoMacRun(JobControlRecord* jcr)
}
// Let the remote SD know we are now really going to send the data.
- sd->fsend(ReplicateData, jcr->impl->Ticket);
+ sd->fsend(ReplicateData, jcr->sd_impl->Ticket);
Dmsg1(110, ">stored: %s", sd->msg);
// Expect to get response to the replicate data cmd from Storage daemon
@@ -545,7 +548,7 @@ bool DoMacRun(JobControlRecord* jcr)
UpdateJobStatistics(jcr, now);
// Read all data and send it to remote SD.
- ok = ReadRecords(jcr->impl->read_dcr, CloneRecordToRemoteSd,
+ ok = ReadRecords(jcr->sd_impl->read_dcr, CloneRecordToRemoteSd,
MountNextReadVolume);
/*
@@ -579,26 +582,27 @@ bool DoMacRun(JobControlRecord* jcr)
/* Inform Storage daemon that we are done */
sd->signal(BNET_TERMINATE);
} else {
- if (!jcr->impl->read_dcr) {
+ if (!jcr->sd_impl->read_dcr) {
Jmsg(jcr, M_FATAL, 0, _("Read device not properly initialized.\n"));
goto bail_out;
}
- Dmsg2(100, "read_dcr=%p write_dcr=%p\n", jcr->impl->read_dcr,
- jcr->impl->dcr);
+ Dmsg2(100, "read_dcr=%p write_dcr=%p\n", jcr->sd_impl->read_dcr,
+ jcr->sd_impl->dcr);
Dmsg3(200, "Found %d volumes names for %s. First=%s\n",
- jcr->impl->NumReadVolumes, Type, jcr->impl->VolList->VolumeName);
+ jcr->sd_impl->NumReadVolumes, Type,
+ jcr->sd_impl->VolList->VolumeName);
// Ready devices for reading and writing.
- if (!AcquireDeviceForAppend(jcr->impl->dcr)
- || !AcquireDeviceForRead(jcr->impl->read_dcr)) {
+ if (!AcquireDeviceForAppend(jcr->sd_impl->dcr)
+ || !AcquireDeviceForRead(jcr->sd_impl->read_dcr)) {
ok = false;
acquire_fail = true;
goto bail_out;
}
- Dmsg2(200, "===== After acquire pos %u:%u\n", jcr->impl->dcr->dev->file,
- jcr->impl->dcr->dev->block_num);
+ Dmsg2(200, "===== After acquire pos %u:%u\n", jcr->sd_impl->dcr->dev->file,
+ jcr->sd_impl->dcr->dev->block_num);
jcr->sendJobStatus(JS_Running);
@@ -606,7 +610,7 @@ bool DoMacRun(JobControlRecord* jcr)
now = (utime_t)time(NULL);
UpdateJobStatistics(jcr, now);
- if (!BeginDataSpool(jcr->impl->dcr)) {
+ if (!BeginDataSpool(jcr->sd_impl->dcr)) {
ok = false;
goto bail_out;
}
@@ -616,20 +620,20 @@ bool DoMacRun(JobControlRecord* jcr)
goto bail_out;
}
- jcr->impl->dcr->VolFirstIndex = jcr->impl->dcr->VolLastIndex = 0;
+ jcr->sd_impl->dcr->VolFirstIndex = jcr->sd_impl->dcr->VolLastIndex = 0;
jcr->run_time = time(NULL);
- SetStartVolPosition(jcr->impl->dcr);
+ SetStartVolPosition(jcr->sd_impl->dcr);
jcr->JobFiles = 0;
// Read all data and make a local clone of it.
- ok = ReadRecords(jcr->impl->read_dcr, CloneRecordInternally,
+ ok = ReadRecords(jcr->sd_impl->read_dcr, CloneRecordInternally,
MountNextReadVolume);
}
bail_out:
if (!ok) { jcr->setJobStatusWithPriorityCheck(JS_ErrorTerminated); }
- if (!acquire_fail && !jcr->impl->remote_replicate && jcr->impl->dcr) {
+ if (!acquire_fail && !jcr->sd_impl->remote_replicate && jcr->sd_impl->dcr) {
/*
* Don't use time_t for job_elapsed as time_t can be 32 or 64 bits,
* and the subsequent Jmsg() editing will break
@@ -647,7 +651,7 @@ bail_out:
jcr->setJobStatusWithPriorityCheck(JS_Terminated);
// Write End Of Session Label
- DeviceControlRecord* dcr = jcr->impl->dcr;
+ DeviceControlRecord* dcr = jcr->sd_impl->dcr;
if (!WriteSessionLabel(dcr, EOS_LABEL)) {
// Print only if ok and not cancelled to avoid spurious messages
@@ -662,7 +666,7 @@ bail_out:
jcr->setJobStatusWithPriorityCheck(currentJobStatus);
}
// Flush out final partial block of this session
- if (!jcr->impl->dcr->WriteBlockToDevice()) {
+ if (!jcr->sd_impl->dcr->WriteBlockToDevice()) {
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 WriteBlockToDevice.\n"));
@@ -674,10 +678,10 @@ bail_out:
if (!ok) {
- DiscardDataSpool(jcr->impl->dcr);
+ DiscardDataSpool(jcr->sd_impl->dcr);
} else {
// Note: if commit is OK, the device will remain blocked
- CommitDataSpool(jcr->impl->dcr);
+ CommitDataSpool(jcr->sd_impl->dcr);
}
job_elapsed = time(NULL) - jcr->run_time;
@@ -696,11 +700,11 @@ bail_out:
}
}
- if (!jcr->impl->remote_replicate && jcr->impl->dcr) {
- if (!ReleaseDevice(jcr->impl->dcr)) { ok = false; }
+ if (!jcr->sd_impl->remote_replicate && jcr->sd_impl->dcr) {
+ if (!ReleaseDevice(jcr->sd_impl->dcr)) { ok = false; }
}
- if (jcr->impl->read_dcr) {
- if (!ReleaseDevice(jcr->impl->read_dcr)) { ok = false; }
+ if (jcr->sd_impl->read_dcr) {
+ if (!ReleaseDevice(jcr->sd_impl->read_dcr)) { ok = false; }
}
jcr->sendJobStatus(); /* update director */