* Version $Id$
*/
/*
- Copyright (C) 2004-2005 Kern Sibbald
+ Copyright (C) 2004-2006 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
RB_OK
};
-void list_spool_stats(BSOCK *bs)
+void list_spool_stats(void sendit(const char *msg, int len, void *sarg), void *arg)
{
- char ed1[30], ed2[30];
+ char *msg, ed1[30], ed2[30];
+ int len;
+
+ msg = (char *)get_pool_memory(PM_MESSAGE);
+
if (spool_stats.data_jobs || spool_stats.max_data_size) {
- bnet_fsend(bs, _("Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n"),
+ len = Mmsg(msg, _("Data spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes/job.\n"),
spool_stats.data_jobs, edit_uint64_with_commas(spool_stats.data_size, ed1),
spool_stats.total_data_jobs,
edit_uint64_with_commas(spool_stats.max_data_size, ed2));
+
+ sendit(msg, len, arg);
}
if (spool_stats.attr_jobs || spool_stats.max_attr_size) {
- bnet_fsend(bs, _("Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n"),
+ len = Mmsg(msg, _("Attr spooling: %u active jobs, %s bytes; %u total jobs, %s max bytes.\n"),
spool_stats.attr_jobs, edit_uint64_with_commas(spool_stats.attr_size, ed1),
spool_stats.total_attr_jobs,
edit_uint64_with_commas(spool_stats.max_attr_size, ed2));
+
+ sendit(msg, len, arg);
}
+
+ free_pool_memory(msg);
}
bool begin_data_spool(DCR *dcr)
{
bool stat = true;
- if (dcr->jcr->spool_data) {
+ if (!dcr->dev->is_dvd() && dcr->jcr->spool_data) {
Dmsg0(100, "Turning on data spooling\n");
dcr->spool_data = true;
stat = open_data_spool_file(dcr);
Dmsg0(100, "Committing spooled data\n");
stat = despool_data(dcr, true /*commit*/);
if (!stat) {
- Pmsg1(000, _("Bad return from despool WroteVol=%d\n"), dcr->WroteVol);
+ Dmsg1(100, _("Bad return from despool WroteVol=%d\n"), dcr->WroteVol);
close_data_spool_file(dcr);
return false;
}
char ec1[50];
Dmsg0(100, "Despooling data\n");
+ /* Commit means that the job is done, so we commit, otherwise, we
+ * are despooling because of user spool size max or some error
+ * (e.g. filesystem full).
+ */
if (commit) {
- Jmsg(jcr, M_INFO, 0, _("Committing spooled data to Volume. Despooling %s bytes ...\n"),
+ Jmsg(jcr, M_INFO, 0, _("Committing spooled data to Volume \"%s\". Despooling %s bytes ...\n"),
+ jcr->dcr->VolumeName,
edit_uint64_with_commas(jcr->dcr->job_spool_size, ec1));
- }
- else {
+ } else {
Jmsg(jcr, M_INFO, 0, _("Writing spooled data to Volume. Despooling %s bytes ...\n"),
edit_uint64_with_commas(jcr->dcr->job_spool_size, ec1));
}
+ dcr->despool_wait = true;
dcr->spooling = false;
lock_device(dcr->dev);
+ dcr->despool_wait = false;
+ dcr->despooling = true;
dcr->dev_locked = true;
/*
Dmsg1(800, "read/write block size = %d\n", block->buf_len);
lseek(rdcr->spool_fd, 0, SEEK_SET); /* rewind */
+ /* Add run time, to get current wait time */
+ time_t despool_start = time(NULL) - jcr->run_time;
+
for ( ; ok; ) {
if (job_canceled(jcr)) {
ok = false;
ok = write_block_to_device(dcr);
if (!ok) {
Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"),
- dcr->dev->print_name(), strerror_dev(dcr->dev));
+ dcr->dev->print_name(), dcr->dev->bstrerror());
}
Dmsg3(800, "Write block ok=%d FI=%d LI=%d\n", ok, block->FirstIndex, block->LastIndex);
}
+
+ /* Subtracting run_time give us elapsed time - wait_time since we started despooling */
+ time_t despool_elapsed = time(NULL) - despool_start - jcr->run_time;
+
+ if (despool_elapsed <= 0) {
+ despool_elapsed = 1;
+ }
+
+ Jmsg(dcr->jcr, M_INFO, 0, _("Despooling elapsed time = %02d:%02d:%02d, Transfer rate = %s bytes/second\n"),
+ despool_elapsed / 3600, despool_elapsed % 3600 / 60, despool_elapsed % 60,
+ edit_uint64_with_suffix(jcr->dcr->job_spool_size / despool_elapsed, ec1));
+
dcr->block = block; /* reset block */
lseek(rdcr->spool_fd, 0, SEEK_SET); /* rewind */
rdcr->jcr = NULL;
free_dcr(rdcr);
free(rdev);
- unlock_device(dcr->dev);
dcr->dev_locked = false;
dcr->spooling = true; /* turn on spooling again */
+ dcr->despooling = false;
+ unlock_device(dcr->dev);
return ok;
}
POOLMEM *name = get_pool_memory(PM_MESSAGE);
make_unique_spool_filename(jcr, &name, bs->fd);
- bs->spool_fd = fopen(name, "w+");
+ bs->spool_fd = fopen(name, "w+b");
if (!bs->spool_fd) {
berrno be;
Jmsg(jcr, M_FATAL, 0, _("fopen attr spool file %s failed: ERR=%s\n"), name,