]> git.sur5r.net Git - bacula/bacula/commitdiff
Add delta_seq to restore tree code
authorEric Bollengier <eric@eb.homelinux.org>
Sat, 20 Nov 2010 22:33:18 +0000 (23:33 +0100)
committerEric Bollengier <eric@eb.homelinux.org>
Thu, 25 Nov 2010 13:59:30 +0000 (14:59 +0100)
Add list of Delta Sequence to TREE_NODE, each Delta is
composed of with JobIndex and JobId

bacula/src/lib/tree.c
bacula/src/lib/tree.h

index ddbf2dcd1590c08ea0b67de25f5f27d61cd7a569..6d4a295dadfc0efdc666cd9e4c5ed04e6d613899 100644 (file)
@@ -111,6 +111,7 @@ static TREE_NODE *new_tree_node(TREE_ROOT *root)
    int size = sizeof(TREE_NODE);
    node = (TREE_NODE *)tree_alloc(root, size);
    memset(node, 0, size);
+   node->delta_seq = -1;
    return node;
 }
 
@@ -125,7 +126,16 @@ static void free_tree_node(TREE_ROOT *root)
    root->mem->mem -= asize;
 }
 
-
+void tree_remove_node(TREE_ROOT *root, TREE_NODE *node)
+{
+   int asize = BALIGN(sizeof(TREE_NODE));
+   node->parent->child.remove(node);
+   if ((root->mem->mem - asize) == (char *)node) {
+      free_tree_node(root);
+   } else {
+      Dmsg0(0, "Can't release tree node\n");
+   }
+}
 
 /*
  * Allocate bytes for filename in tree structure.
@@ -172,6 +182,18 @@ void free_tree(TREE_ROOT *root)
    return;
 }
 
+/* Add Delta part for this node */
+void tree_add_delta_part(TREE_ROOT *root, TREE_NODE *node,
+                         JobId_t JobId, int32_t FileIndex)
+{
+   struct delta_list *elt = 
+      (struct delta_list*) tree_alloc(root, sizeof(struct delta_list));
+
+   elt->next = node->delta_list;
+   elt->JobId = JobId;
+   elt->FileIndex = FileIndex;
+   node->delta_list = elt;
+}
 
 /*
  * Insert a node in the tree. This is the main subroutine
index c24feb3960f56181eb971e0536cd5e45c63bd7e2..3464cb1965d889203ff5261adce04c4634f8a049 100644 (file)
@@ -50,6 +50,11 @@ struct s_mem {
 #define first_child(node) \
         ((TREE_NODE *)(node->child.first())
 
+struct delta_list {
+   struct delta_list *next;
+   JobId_t JobId;
+   int32_t FileIndex;
+};
 
 /*
  * Keep this node as small as possible because
@@ -63,6 +68,7 @@ struct s_tree_node {
    char *fname;                       /* file name */
    int32_t FileIndex;                 /* file index */
    uint32_t JobId;                    /* JobId */
+   int32_t delta_seq;                 /* current delta sequence */
    uint16_t fname_len;                /* filename length */
    int type: 8;                       /* node type */
    unsigned int extract: 1;           /* extract item */
@@ -73,6 +79,7 @@ struct s_tree_node {
    unsigned int loaded: 1;            /* set when the dir is in the tree */
    struct s_tree_node *parent;
    struct s_tree_node *next;          /* next hash of FileIndex */
+   struct delta_list *delta_list;     /* delta parts for this node */
 };
 typedef struct s_tree_node TREE_NODE;
 
@@ -84,6 +91,7 @@ struct s_tree_root {
    const char *fname;                 /* file name */
    int32_t FileIndex;                 /* file index */
    uint32_t JobId;                    /* JobId */
+   int32_t delta_seq;                 /* current delta sequence */
    uint16_t fname_len;                /* filename length */
    unsigned int type: 8;              /* node type */
    unsigned int extract: 1;           /* extract item */
@@ -93,6 +101,7 @@ struct s_tree_root {
    unsigned int loaded: 1;            /* set when the dir is in the tree */
    struct s_tree_node *parent;
    struct s_tree_node *next;          /* next hash of FileIndex */
+   struct delta_list *delta_list;     /* delta parts for this node */
 
    /* The above ^^^ must be identical to a TREE_NODE structure */
    struct s_tree_node *first;         /* first entry in the tree */
@@ -121,8 +130,11 @@ TREE_NODE *insert_tree_node(char *path, char *fname, int type,
 TREE_NODE *make_tree_path(char *path, TREE_ROOT *root);
 TREE_NODE *tree_cwd(char *path, TREE_ROOT *root, TREE_NODE *node);
 TREE_NODE *tree_relcwd(char *path, TREE_ROOT *root, TREE_NODE *node);
+void tree_add_delta_part(TREE_ROOT *root, TREE_NODE *node, 
+                         JobId_t JobId, int32_t FileIndex);
 void free_tree(TREE_ROOT *root);
 int tree_getpath(TREE_NODE *node, char *buf, int buf_size);
+void tree_remove_node(TREE_ROOT *root, TREE_NODE *node);
 
 /*
  * Use the following for traversing the whole tree. It will be