]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix restore for PostgreSQL ordering + update ChangeLog
authorKern Sibbald <kern@sibbald.com>
Mon, 5 Apr 2004 12:38:38 +0000 (12:38 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 5 Apr 2004 12:38:38 +0000 (12:38 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1182 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/ChangeLog
bacula/ReleaseNotes
bacula/src/dird/ua_tree.c

index f7f20a7c054d8b87479480810f8106c9d2bccc2e..c846feb779c9d781afd1f58e61f78356325af98e 100644 (file)
@@ -1,4 +1,44 @@
 
 
+2004-04-05 Version 1.34.0 04Apr04 Release
+04Apr04
+- A good number of document updates.
+- Fixed the order which multiple files are accepted for 
+  inclusion in the restore tree due to the fact that PostgreSQL
+  returns files in a different order from their insertion.
+02Apr04
+- Fix autochanger test in btape. It used old editing routines.
+- Fix run_program to return 0 if program runs and no output.
+- Add more debug to run_program.
+- Make signal debug print signal string.
+01Apr04
+- Build console with client-only build.
+- Add better error messages to some of the db_xxx routines.
+- Apply Christopher Hull's patches for proper Win32 shutdown.
+- Eliminate True and False in favor of true and false.
+- Put correct thread id in jcr once the correct thread is running.
+- Zap head and tail pointers in dlist when everything is removed.
+- Rework sm_dump() so that it won't overrun a buffer when editing
+  and error message.
+- Fix watchdog to properly remove entries while walking the
+  dlist chain.
+- Fix termination of last_jobs list by removing broken code.
+31Mar04
+- Update dbcheck to fix Paths without a trailing slash and Filenames
+  with a trailing slash.
+30Mar04
+- Add -p option to all SD programs including bacula-sd. It causes
+  Bacula to proceed or forge on in case of I/O errors. It is unlikely
+  this will help, and it is strongly recommended against running
+  the daemon with this option in production.
+- Tweaked the Makefile not to create the gnome directories except
+  when doing a gnome install.
+28Mar04
+- Implement Qmsg() queuing of messages to prevent recursion especially
+  for bnet.c where recursion is fatal.
+- Add detection of ncurses if the termcap lib is not found.
+- Tweak winabout -- start cleanup.
+- Fix dlist again, when list is destroyed, be sure to null head and
+  tail pointers.
 27Mar04
 - Make the default for restore to have nothing marked.
 - The "all" keyword on the restore command marks everything by
 27Mar04
 - Make the default for restore to have nothing marked.
 - The "all" keyword on the restore command marks everything by
@@ -14,7 +54,7 @@
 24Mar04
 - Apply corrected SQL to sql_get.c supplied by Dan Langille.
 - Implement "delete job jobid=xxx jobid=yyy ..."
 24Mar04
 - Apply corrected SQL to sql_get.c supplied by Dan Langille.
 - Implement "delete job jobid=xxx jobid=yyy ..."
-- Implemente "purge volume=xxx volume=yyy ..."
+- Implement "purge volume=xxx volume=yyy ..."
 - Fix buffer overrun in query string substitution.
 22Mar04
 - Fix bad format %s instead of %d for editing new slot in update volume.
 - Fix buffer overrun in query string substitution.
 22Mar04
 - Fix bad format %s instead of %d for editing new slot in update volume.
index f31e076058e708915e4a31d8198d0ab2414e967d..6ba727390203599fc4c0f58ed3de53e149fec24e 100644 (file)
@@ -4,10 +4,11 @@
   Bacula code: Total files = 306 Total lines = 91,112 (*.h *.c *.in)
 
 Major Features:
   Bacula code: Total files = 306 Total lines = 91,112 (*.h *.c *.in)
 
 Major Features:
-- Data spooling which eliminates tape shoe-shine during Inc backups,         
+- Data spooling which reduces tape shoe-shine during Inc backups,         
   and permits multiple simultaneous backups without interleaved blocks.
 - Native Win32 client -- much faster and restores permissions correctly
   (thanks to Christopher Hull)
   and permits multiple simultaneous backups without interleaved blocks.
 - Native Win32 client -- much faster and restores permissions correctly
   (thanks to Christopher Hull)
+- New Windows style installer for the Win32 Client.
 - PostgreSQL database driver (thanks to Dan Langille).
 - Polling of devices eliminating need to unmount and mount from
   console.
 - PostgreSQL database driver (thanks to Dan Langille).
 - Polling of devices eliminating need to unmount and mount from
   console.
@@ -17,11 +18,13 @@ Major Features:
 - JobDefs resource permits smaller .conf files for Director
 - Access console lists for the Console
 - Pool level overrides.
 - JobDefs resource permits smaller .conf files for Director
 - Access console lists for the Console
 - Pool level overrides.
-- Daemon statistics memory.
+- Daemon "status" is recovered across daemon executions.
 - Improved btape "test" and "fill" commands.
 
 
 Items to note:  !!!!!
 - Improved btape "test" and "fill" commands.
 
 
 Items to note:  !!!!!
+- If you have a RedHat system, be sure to delete the /lib/tls
+  directory from your system. It contains defective pthreads code.
 - The restore default is changed to have nothing selected by default.
   You must either enter: "restore all" or after getting into the tree
   selection prompt enter "mark *" to have everything selected.
 - The restore default is changed to have nothing selected by default.
   You must either enter: "restore all" or after getting into the tree
   selection prompt enter "mark *" to have everything selected.
@@ -44,6 +47,9 @@ Items to note:  !!!!!
   "test" command will tell you. If you get an error with TWOEOF set   
   to yes, set it to no.
 
   "test" command will tell you. If you get an error with TWOEOF set   
   to yes, set it to no.
 
+- If you want either bsmtp or bconsole on Win32, you will need
+  to load the 1.32 version along with cygwin1.dll. Some solution
+  for this will be forthcoming in a future update.
 - The daemon protocol has changed from version 1.32, you must update 
   everything at once.
 - The database level has been updated. You must either re-initialize
 - The daemon protocol has changed from version 1.32, you must update 
   everything at once.
 - The database level has been updated. You must either re-initialize
@@ -113,7 +119,14 @@ New Commands:
 
 
 Additional changes:
 
 
 Additional changes:
-- Implement Gnome 2.0 restore GUI
+- Slackware support
+- On multiple ctl-c, exit from console quickly.
+- Implement "delete job jobid=xxx jobid=yyy ..."
+- Implement "purge volume=xxx volume=yyy ..."
+- Add -p option to all SD programs including bacula-sd. It causes
+  Bacula to proceed or forge on in case of I/O errors. It is unlikely
+  this will help, and it is strongly recommended against running
+  the daemon with this option in production.
 - Add a missing unlock in the jobq handler.
 - Fix bug where a soft linked file and a directory had the same name
   by treating the soft link as a directory and putting the entries under
 - Add a missing unlock in the jobq handler.
 - Fix bug where a soft linked file and a directory had the same name
   by treating the soft link as a directory and putting the entries under
index 5ebf41bf25b1051207b2bb4c799ad9b48244d49c..d383ff3bffef32a7af9372df4d9a299caa682b99 100644 (file)
@@ -154,7 +154,9 @@ int insert_tree_handler(void *ctx, int num_fields, char **row)
    char fname[5000];
    TREE_NODE *node, *new_node;
    int type;
    char fname[5000];
    TREE_NODE *node, *new_node;
    int type;
-   bool hard_link;
+   bool hard_link, first_time, ok;
+   int FileIndex;
+   JobId_t JobId;
 
    strip_trailing_junk(row[1]);
    if (*row[1] == 0) {               /* no filename => directory */
 
    strip_trailing_junk(row[1]);
    if (*row[1] == 0) {               /* no filename => directory */
@@ -174,24 +176,39 @@ int insert_tree_handler(void *ctx, int num_fields, char **row)
    }
    hard_link = (decode_LinkFI(row[4], &statp) != 0);
    bsnprintf(fname, sizeof(fname), "%s%s%s", row[0], row[1], "");
    }
    hard_link = (decode_LinkFI(row[4], &statp) != 0);
    bsnprintf(fname, sizeof(fname), "%s%s%s", row[0], row[1], "");
-//    S_ISLNK(statp.st_mode)?" ->":"");
    Dmsg3(200, "FI=%d type=%d fname=%s\n", node->FileIndex, type, fname);
    new_node = insert_tree_node(fname, node, tree->root, NULL);
    /* Note, if node already exists, save new one for next time */
    if (new_node != node) {
    Dmsg3(200, "FI=%d type=%d fname=%s\n", node->FileIndex, type, fname);
    new_node = insert_tree_node(fname, node, tree->root, NULL);
    /* Note, if node already exists, save new one for next time */
    if (new_node != node) {
+      first_time = false;            /* we saw this file before */
       tree->avail_node = node;       /* node already exists */
    } else {
       tree->avail_node = node;       /* node already exists */
    } else {
+      first_time = true;             /* first time we saw this file */
       tree->avail_node = NULL;       /* added node to tree */
    }
       tree->avail_node = NULL;       /* added node to tree */
    }
+   JobId = (JobId_t)str_to_int64(row[3]);
+   FileIndex = atoi(row[2]);
    /*
    /*
-    * If the user has backed up a hard linked file twice, the
-    *  second copy will be a pointer (i.e. hard link will be set),
-    *  so we do not overwrite the original file with a pointer file.
+    * - The first time we see a file, we accept it.
+    * - In the same JobId, we accept only the first copy of a
+    *  hard linked file (the others are simply pointers).
+    * - In the same JobId, we accept the last copy of any other
+    *  file -- in particular directories.
+    *
+    * All the code to set ok could be condensed to a single
+    *  line, but it would be even harder to read.
     */
     */
-   if (!new_node->hard_link || hard_link) {
+   ok = true;
+   if (!first_time && JobId == new_node->JobId) {
+      if ((hard_link && FileIndex > new_node->FileIndex) ||
+         (!hard_link && FileIndex < new_node->FileIndex)) {
+        ok = false;
+      }
+   }
+   if (ok) {
       new_node->hard_link = hard_link;
       new_node->hard_link = hard_link;
-      new_node->FileIndex = atoi(row[2]);
-      new_node->JobId = (JobId_t)str_to_int64(row[3]);
+      new_node->FileIndex = FileIndex;
+      new_node->JobId = JobId;
       new_node->type = type;
       new_node->soft_link = S_ISLNK(statp.st_mode) != 0;
       if (tree->all) {
       new_node->type = type;
       new_node->soft_link = S_ISLNK(statp.st_mode) != 0;
       if (tree->all) {