From: Kern Sibbald Date: Fri, 28 Apr 2006 13:19:34 +0000 (+0000) Subject: - Start implementing Christopher's St.Bernard code. X-Git-Tag: Release-7.0.0~8013 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b0455e438e0314dfd7493d12041f8742f07d160e;p=bacula%2Fbacula - Start implementing Christopher's St.Bernard code. - Add Christopher's mods for opening files. - Strip \r \n from Win32 error messages (Christopher) - Add more info about Win32 system if unknown (Christopher) - Use bstrn(cpy, cat) routines to avoid overrun in compat.cpp - Fix a number of incorrect strings marked for translation, when they should not be (e.g. commands). - Fix StartTime bug reported for ClientRunBeforeJob and RunBeforeJob Patches supplied by user in bugs #608 and #599. - Use most recent of st_ctime and st_mtime in restore tree DIR listing. This fixes some problems with Win32 printing incorrect values. - Correct the clock shift comm time calculation between the DIR and the FD. It was added rather than subtracted. - Strip all backslashes in filenames to be restored on Win32 machines -- the names should all be in Unix format, and if there are any backslashes it is most likely due to an improper FileSet definition, and the files will not otherwise be restorable. - Remove lib/regex.c (replaced by bregex.c). - Delete src/win32/License.txt - Modify installer to install LICENSE git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@2983 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/LICENSE b/bacula/LICENSE index 56a74ef734..d0b2ced278 100644 --- a/bacula/LICENSE +++ b/bacula/LICENSE @@ -85,8 +85,8 @@ respect for proprietary and copyrighted code. ===================================== The entire GPL is reproduced in the manuals distributed with the -Bacula documentation and can also be found online on the GNU web site as well -as at www.bacula.org. +Bacula documentation and can also be found online on the GNU web site +as well as at www.bacula.org. Certain parts of the Bacula software are licensed by their copyright holder(s) undert the GPL with no modifications. These diff --git a/bacula/kernstodo b/bacula/kernstodo index cfa76f1b9a..45ebb2f1a1 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -88,6 +88,7 @@ minutes). [ possibly a Python event -- kes ] === +- Integrate Christopher's St. Bernard code. - run_cmd() returns int should return JobId_t - get_next_jobid_from_list() returns int should return JobId_t - Document export LDFLAGS=-L/usr/lib64 @@ -98,7 +99,6 @@ minutes). then be migrated. - Detect resource deadlock in Migrate when same job wants to read and write the same device. -- Make hardlink code at line 240 of find_one.c use binary search. - Queue warning/error messages during restore so that they are reported at the end of the report rather than being hidden in the file listing ... @@ -107,6 +107,8 @@ minutes). - Look at fixing restore status stats in SD. - Make selection of Database used in restore correspond to client. +- Look at using ioctl(FIMAP) and FIGETBSZ for sparse files. + http://www.informatik.uni-frankfurt.de/~loizides/reiserfs/fibmap.html - Implement a mode that says when a hard read error is encountered, read many times (as it currently does), and if the block cannot be read, skip to the next block, and try again. If @@ -118,6 +120,7 @@ minutes). ("D","Diff"), ("I","Inc"); - Add ACL to restore only to original location. +- Show files/second in client status output. - Add a recursive mark command (rmark) to restore. - "Minimum Job Interval = nnn" sets minimum interval between Jobs of the same level and does not permit multiple simultaneous @@ -1404,3 +1407,4 @@ Block Position: 0 - Fix Maximum Changer Wait, Maximum Open Wait, Maximum Rewind Wait to accept time qualifiers. - Does ClientRunAfterJob fail the job on a bad return code? +- Make hardlink code at line 240 of find_one.c use binary search. diff --git a/bacula/kes-1.38 b/bacula/kes-1.38 index 054d6de3b3..4ce01f5192 100644 --- a/bacula/kes-1.38 +++ b/bacula/kes-1.38 @@ -2,6 +2,59 @@ Kern Sibbald General: +26Apr06 +- Implement an NT_() macro to indicate that text should NOT + be translated. +- Fix a number of incorrect strings marked for translation, when + they should not be (e.g. commands). +- Fix StartTime bug reported for ClientRunBeforeJob and RunBeforeJob + Patches supplied by user in bugs #608 and #599. +- Use most recent of st_ctime and st_mtime in restore tree DIR + listing. This fixes some problems with Win32 printing incorrect + values. +- Correct the clock shift comm time calculation between the DIR + and the FD. It was added rather than subtracted. +- Strip all backslashes in filenames to be restored on Win32 + machines -- the names should all be in Unix format, and if + there are any backslashes it is most likely due to an improper + FileSet definition, and the files will not otherwise be + restorable. +- Remove lib/regex.c (replaced by bregex.c). +- Delete src/win32/License.txt +- Modify installer to install LICENSE +25Apr06 +- Add back ua_label barcode fix from Rufolf Cejka. +23Apr06 +- Add 'Dir Status' button to the gnome console. +- Display heap stats in Storage daemon without debug level. +22Apr06 +- Integrate most of the MinGW changes -- more to do. +21Apr06 +- Implement using pg_config for finding PostgreSQL files. + Fixes bug #600. Patch supplied by user. +- Remove -t option from mktemp in mtx_changer.in and use + working directory. Fixes bug #578. +- Update job start time after the any run before job so that + files created by the script are only backed up once. Fixes + bug #599. +- Strip trailing newline only from filenames entered in + the restore command when reading a file. This permits + the user to enter filenames with trailing spaces. Fixes + bug #549. The user supplied a patch that I modified slightly. +- Use the most recent time (st_mtime, st_ctime) in the dir + command in restore. This gives the user a better idea of what + the newest file really is. This fixes bug #574. The fix + was suggested by the user. +18Apr06 +- Remove the -f option from the chown in Makefile.in for more + portability. +- Change setting the group in Makefile.in to use chgrp for + more portability. +- Implement a Bacula read/write lock for Python rather + than using the Python lock to avoid recursive problems. +- Correct the uninstall directory names in filed/Makefile.in + as reported by a user. + Release 1.38.8 (14Apr06) released 14Apr06 15Apr06 - Correct Makefile bug found by Dan Langille. diff --git a/bacula/kes-1.39 b/bacula/kes-1.39 index e214dad2be..0e391218c1 100644 --- a/bacula/kes-1.39 +++ b/bacula/kes-1.39 @@ -2,6 +2,29 @@ Kern Sibbald General: +28Apr06 +- Start implementing Christopher's St.Bernard code. +- Add Christopher's mods for opening files. +- Strip \r \n from Win32 error messages (Christopher) +- Add more info about Win32 system if unknown (Christopher) +- Use bstrn(cpy, cat) routines to avoid overrun in compat.cpp +- Fix a number of incorrect strings marked for translation, when + they should not be (e.g. commands). +- Fix StartTime bug reported for ClientRunBeforeJob and RunBeforeJob + Patches supplied by user in bugs #608 and #599. +- Use most recent of st_ctime and st_mtime in restore tree DIR + listing. This fixes some problems with Win32 printing incorrect + values. +- Correct the clock shift comm time calculation between the DIR + and the FD. It was added rather than subtracted. +- Strip all backslashes in filenames to be restored on Win32 + machines -- the names should all be in Unix format, and if + there are any backslashes it is most likely due to an improper + FileSet definition, and the files will not otherwise be + restorable. +- Remove lib/regex.c (replaced by bregex.c). +- Delete src/win32/License.txt +- Modify installer to install LICENSE 26Apr06 - Fix bug in build-win32-cross-tools script reported by Howard - Implement cross compiled bconsole diff --git a/bacula/src/dird/backup.c b/bacula/src/dird/backup.c index 292857a207..9ba0ee4bdd 100644 --- a/bacula/src/dird/backup.c +++ b/bacula/src/dird/backup.c @@ -220,6 +220,22 @@ bool do_backup(JCR *jcr) goto bail_out; } + /* + * We re-update the job start record so that the start + * time is set after the run before job. This avoids + * that any files created by the run before job will + * be saved twice. They will be backed up in the current + * job, but not in the next one unless they are changed. + * Without this, they will be backed up in this job and + * in the next job run because in that case, their date + * is after the start of this run. + */ + jcr->start_time = time(NULL); + jcr->jr.StartTime = jcr->start_time; + if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { + Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + } + /* Send backup command */ bnet_fsend(fd, backupcmd); if (!response(jcr, fd, OKbackup, "backup", DISPLAY_ERROR)) { diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index 51ad085b07..6c262a7341 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -194,7 +194,7 @@ static void send_since_time(JCR *jcr) char ed1[50]; stime = str_to_utime(jcr->stime); - bnet_fsend(fd, levelcmd, _("since_utime "), edit_uint64(stime, ed1), 0); + bnet_fsend(fd, levelcmd, NT_("since_utime "), edit_uint64(stime, ed1), 0); while (bget_dirmsg(fd) >= 0) { /* allow him to poll us to sync clocks */ Jmsg(jcr, M_INFO, 0, "%s\n", fd->msg); } diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index 339fb40844..511581d387 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -275,6 +275,8 @@ static void *job_thread(void *arg) * in the next job run because in that case, their date * is after the start of this run. */ + jcr->start_time = time(NULL); + jcr->jr.StartTime = jcr->start_time; if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); } diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index b6dba3c223..91235844f2 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -1058,6 +1058,7 @@ static int level_cmd(JCR *jcr) goto bail_out; } since_time = str_to_uint64(buf); /* this is the since time */ + Dmsg1(100, "since_time=%d\n", (int)since_time); char ed1[50], ed2[50]; /* * Sync clocks by polling him for the time. We take @@ -1077,8 +1078,10 @@ static int level_cmd(JCR *jcr) } his_time = str_to_uint64(buf); rt = get_current_btime() - bt_start; /* compute round trip time */ - bt_adj -= his_time - bt_start - rt/2; - Dmsg2(200, "rt=%s adj=%s\n", edit_uint64(rt, ed1), edit_uint64(bt_adj, ed2)); + Dmsg2(100, "Dirtime=%s FDtime=%s\n", edit_uint64(his_time, ed1), + edit_uint64(bt_start, ed2)); + bt_adj += bt_start - his_time - rt/2; + Dmsg2(100, "rt=%s adj=%s\n", edit_uint64(rt, ed1), edit_uint64(bt_adj, ed2)); } bt_adj = bt_adj / 8; /* compute average time */ diff --git a/bacula/src/filed/restore.c b/bacula/src/filed/restore.c index 274b07148f..fc4f3df977 100644 --- a/bacula/src/filed/restore.c +++ b/bacula/src/filed/restore.c @@ -127,6 +127,30 @@ void do_restore(JCR *jcr) } jcr->buf_size = sd->msglen; +#ifdef stbernard_implemented +/ #if defined(HAVE_WIN32) + bool bResumeOfmOnExit = FALSE; + if (isOpenFileManagerRunning()) { + if ( pauseOpenFileManager() ) { + Jmsg(jcr, M_INFO, 0, _("Open File Manager paused\n") ); + bResumeOfmOnExit = TRUE; + } + else { + Jmsg(jcr, M_ERROR, 0, _("FAILED to pause Open File Manager\n") ); + } + } + { + char username[UNLEN+1]; + DWORD usize = sizeof(username); + int privs = enable_backup_privileges(NULL, 1); + if (GetUserName(username, &usize)) { + Jmsg2(jcr, M_INFO, 0, _("Running as '%s'. Privmask=%#08x\n"), username, + } else { + Jmsg(jcr, M_WARNING, 0, _("Failed to retrieve current UserName\n")); + } + } +#endif + #ifdef HAVE_LIBZ uint32_t compress_buf_size = jcr->buf_size + 12 + ((jcr->buf_size+999) / 1000) + 100; jcr->compress_buf = (char *)bmalloc(compress_buf_size); diff --git a/bacula/src/filed/status.c b/bacula/src/filed/status.c index 4c342c8a41..e96060aead 100755 --- a/bacula/src/filed/status.c +++ b/bacula/src/filed/status.c @@ -127,8 +127,6 @@ static void do_status(void sendit(const char *msg, int len, void *sarg), void *a sizeof(off_t), sizeof(size_t), debug_level, get_trace()); sendit(msg, len, arg); - list_terminated_jobs(sendit, arg); - /* * List running jobs */ @@ -188,13 +186,15 @@ static void do_status(void sendit(const char *msg, int len, void *sarg), void *a } endeach_jcr(njcr); - Dmsg0(1000, "Begin status jcr loop.\n"); if (!found) { len = Mmsg(msg, _("No Jobs running.\n")); sendit(msg, len, arg); } len = Mmsg(msg, _("====\n")); sendit(msg, len, arg); + + list_terminated_jobs(sendit, arg); + free_pool_memory(msg); } diff --git a/bacula/src/findlib/bfile.c b/bacula/src/findlib/bfile.c index ec0f3beeb6..cab8c54c02 100644 --- a/bacula/src/findlib/bfile.c +++ b/bacula/src/findlib/bfile.c @@ -397,26 +397,24 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) dwflags = 0; } - // unicode or ansii open for create write - if (p_CreateFileW && p_MultiByteToWideChar) { - bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - CREATE_ALWAYS, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } - else { - bfd->fh = p_CreateFileA(win32_fname, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - CREATE_ALWAYS, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } - + // unicode or ansii open for create write + if (p_CreateFileW && p_MultiByteToWideChar) { + bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, + dwaccess, /* Requested access */ + 0, /* Shared mode */ + NULL, /* SecurityAttributes */ + CREATE_ALWAYS, /* CreationDisposition */ + dwflags, /* Flags and attributes */ + NULL); /* TemplateFile */ + } else { + bfd->fh = p_CreateFileA(win32_fname, + dwaccess, /* Requested access */ + 0, /* Shared mode */ + NULL, /* SecurityAttributes */ + CREATE_ALWAYS, /* CreationDisposition */ + dwflags, /* Flags and attributes */ + NULL); /* TemplateFile */ + } bfd->mode = BF_WRITE; @@ -429,26 +427,25 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) dwflags = 0; } - // unicode or ansii open for open existing write - if (p_CreateFileW && p_MultiByteToWideChar) { - bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } - else { - bfd->fh = p_CreateFileA(win32_fname, - dwaccess, /* Requested access */ - 0, /* Shared mode */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ + // unicode or ansii open for open existing write + if (p_CreateFileW && p_MultiByteToWideChar) { + bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, + dwaccess, /* Requested access */ + 0, /* Shared mode */ + NULL, /* SecurityAttributes */ + OPEN_EXISTING, /* CreationDisposition */ + dwflags, /* Flags and attributes */ + NULL); /* TemplateFile */ + } else { + bfd->fh = p_CreateFileA(win32_fname, + dwaccess, /* Requested access */ + 0, /* Shared mode */ + NULL, /* SecurityAttributes */ + OPEN_EXISTING, /* CreationDisposition */ + dwflags, /* Flags and attributes */ + NULL); /* TemplateFile */ - } + } bfd->mode = BF_WRITE; @@ -464,24 +461,23 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) } // unicode or ansii open for open existing read - if (p_CreateFileW && p_MultiByteToWideChar) { - bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, - dwaccess, /* Requested access */ - dwshare, /* Share modes */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } - else { - bfd->fh = p_CreateFileA(win32_fname, - dwaccess, /* Requested access */ - dwshare, /* Share modes */ - NULL, /* SecurityAttributes */ - OPEN_EXISTING, /* CreationDisposition */ - dwflags, /* Flags and attributes */ - NULL); /* TemplateFile */ - } + if (p_CreateFileW && p_MultiByteToWideChar) { + bfd->fh = p_CreateFileW((LPCWSTR)win32_fname_wchar, + dwaccess, /* Requested access */ + dwshare, /* Share modes */ + NULL, /* SecurityAttributes */ + OPEN_EXISTING, /* CreationDisposition */ + dwflags, /* Flags and attributes */ + NULL); /* TemplateFile */ + } else { + bfd->fh = p_CreateFileA(win32_fname, + dwaccess, /* Requested access */ + dwshare, /* Share modes */ + NULL, /* SecurityAttributes */ + OPEN_EXISTING, /* CreationDisposition */ + dwflags, /* Flags and attributes */ + NULL); /* TemplateFile */ + } bfd->mode = BF_READ; } diff --git a/bacula/src/version.h b/bacula/src/version.h index e0810e5c87..ba951eb5c9 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -4,8 +4,8 @@ #undef VERSION #define VERSION "1.39.10" -#define BDATE "26 April 2006" -#define LSMDATE "26Apr06" +#define BDATE "28 April 2006" +#define LSMDATE "28Apr06" /* Debug flags */ #undef DEBUG