From: Kern S. <ke...@us...> - 2006-07-31 17:37:02
|
Update of /cvsroot/bacula/bacula/src/stored In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv30243/src/stored Modified Files: append.c block.c btape.c dev.c spool.c Log Message: kes Make a first cut at a ReleaseNotes and ChangeLog for a beta release. kes Make make clean decend into the src/win32 directory. kes Fix some #ifdefing so that Solaris and FreeBSD compile sys/stat.h was turned off. kes Use suffix editing for new transfer rate messages. kes Attempt to come up with a workaround which seems to be an OS bug where write() returns EBUSY. IMO this should not happen. It triggered in truncatebug test. The workaround retries using a 100 ms wait. kes Eliminate a strerror() call in a class method that failed with older C++ compilers. kes Use rm -rf rather than rmdir to delete the src/win32/release directory during make clean. Index: block.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/stored/block.c,v retrieving revision 1.129 retrieving revision 1.130 diff -u -d -r1.129 -r1.130 --- block.c 27 Jul 2006 01:58:45 -0000 1.129 +++ block.c 31 Jul 2006 17:36:56 -0000 1.130 @@ -509,13 +509,20 @@ #endif /* - * Do write here + * Do write here, make a somewhat feeble attempt to recover from + * I/O errors, or from the OS telling us it is busy. */ - if (dev->is_tape()) { - stat = tape_write(dev->fd, block->buf, (size_t)wlen); - } else { - stat = write(dev->fd, block->buf, (size_t)wlen); - } + int retry = 0; + do { + if (dev->is_tape()) { + stat = tape_write(dev->fd, block->buf, (size_t)wlen); + } else { + stat = write(dev->fd, block->buf, (size_t)wlen); + } + if (retry > 10) { + bmicrosleep(0, 100000); /* pause a bit if lots of errors */ + } + } while (stat == -1 && (errno == EBUSY || errno == EIO) && retry++ < 30); #ifdef DEBUG_BLOCK_ZEROING if (bp[0] == 0 && bp[1] == 0 && bp[2] == 0 && block->buf[12] == 0) { Index: btape.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/stored/btape.c,v retrieving revision 1.139 retrieving revision 1.140 diff -u -d -r1.139 -r1.140 --- btape.c 27 Jul 2006 01:58:45 -0000 1.139 +++ btape.c 31 Jul 2006 17:36:56 -0000 1.140 @@ -2099,6 +2099,7 @@ file_index = 0; if (last_block) { free_block(last_block); + last_block = NULL; } last_block_num = last_block_num1; last_file = last_file1; Index: dev.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/stored/dev.c,v retrieving revision 1.175 retrieving revision 1.176 diff -u -d -r1.175 -r1.176 --- dev.c 27 Jul 2006 01:58:45 -0000 1.175 +++ dev.c 31 Jul 2006 17:36:56 -0000 1.176 @@ -1712,10 +1712,11 @@ /* Typically on FreeBSD */ #ifdef MTIOCERRSTAT { + berrno be; /* Read and clear SCSI error status */ union mterrstat mt_errstat; Dmsg2(200, "Doing MTIOCERRSTAT errno=%d ERR=%s\n", dev_errno, - strerror(dev_errno)); + be.strerror(dev_errno)); tape_ioctl(fd, MTIOCERRSTAT, (char *)&mt_errstat); } #endif Index: append.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/stored/append.c,v retrieving revision 1.71 retrieving revision 1.72 diff -u -d -r1.71 -r1.72 --- append.c 30 Jul 2006 17:28:08 -0000 1.71 +++ append.c 31 Jul 2006 17:36:56 -0000 1.72 @@ -259,7 +259,7 @@ Jmsg(dcr->jcr, M_INFO, 0, _("Job write elapsed time = %02d:%02d:%02d, Transfer rate = %s bytes/second\n"), job_elapsed / 3600, job_elapsed % 3600 / 60, job_elapsed % 60, - edit_uint64_with_commas(jcr->JobBytes / job_elapsed, ec)); + edit_uint64_with_suffix(jcr->JobBytes / job_elapsed, ec)); /* Create Job status for end of session label */ set_jcr_job_status(jcr, ok?JS_Terminated:JS_ErrorTerminated); Index: spool.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/stored/spool.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -d -r1.44 -r1.45 --- spool.c 30 Jul 2006 17:28:08 -0000 1.44 +++ spool.c 31 Jul 2006 17:36:56 -0000 1.45 @@ -279,7 +279,7 @@ 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_commas(jcr->dcr->job_spool_size / despool_elapsed, ec1)); + edit_uint64_with_suffix(jcr->dcr->job_spool_size / despool_elapsed, ec1)); dcr->block = block; /* reset block */ |