summaryrefslogtreecommitdiff
path: root/src/common/unionfs.c
diff options
context:
space:
mode:
authorslioch <slioch@eng-140.vyatta.com>2009-11-02 17:22:05 -0800
committerslioch <slioch@eng-140.vyatta.com>2009-11-02 17:22:05 -0800
commit89a8f27b3d905501c9097544f27dd76208303b80 (patch)
treeb2708fc3536002ac87f5e732f329d80f1b2106fe /src/common/unionfs.c
parentd1936f6f6328143199d2a2f665ca92292c00709f (diff)
downloadvyatta-cfg-89a8f27b3d905501c9097544f27dd76208303b80.tar.gz
vyatta-cfg-89a8f27b3d905501c9097544f27dd76208303b80.zip
fix for missing priority value on embedded multinode. bug behavior was more limited than this--at least tag node.def and multiple
configuration on commit. tested fix with limited regression test. also slightly modified break on priority values where embedded multinodes with priority values are treated as discrete transactions (which isolates failures within the multinode and not the parent of the multinode).
Diffstat (limited to 'src/common/unionfs.c')
-rw-r--r--src/common/unionfs.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/common/unionfs.c b/src/common/unionfs.c
index 45127e8..452c774 100644
--- a/src/common/unionfs.c
+++ b/src/common/unionfs.c
@@ -225,13 +225,6 @@ retrieve_data(char* rel_data_path, GNode *node, char* root, NODE_OPERATION op)
}
//either multi or tag--shouldn't have made a difference, but arkady was confused.
vn->_config._multi = (def.tag | def.multi);
- if (def.def_priority == 0) {
- vn->_config._priority = LOWEST_PRIORITY;
- }
- else {
- vn->_config._priority = def.def_priority;
- }
-
}
}
@@ -252,12 +245,6 @@ retrieve_data(char* rel_data_path, GNode *node, char* root, NODE_OPERATION op)
//Need to do two things:
// 1. Come to agreement on where the behavior splits on priority multinodes
// 2. Not check for tag node in the def datastructure but use the new datastructure as at some point tag and multi will be the same
- if (vn_parent->_config._def.tag == TRUE) { //only for embedded multinodes
- vn->_config._priority = vn_parent->_config._priority;
- vn_parent->_config._priority = LOWEST_PRIORITY;
- }
-
-
//now let's patch up the def multi-nodes
//move the def for the multinode from the parent to the value node
struct VyattaNode* vn2 = (struct VyattaNode*)node->data;
@@ -282,6 +269,25 @@ retrieve_data(char* rel_data_path, GNode *node, char* root, NODE_OPERATION op)
}
}
+
+ if (G_NODE_IS_ROOT(node) == FALSE) {
+ struct VyattaNode* vn_parent = (struct VyattaNode*)node->parent->data;
+ struct VyattaNode* vn = (struct VyattaNode*)node->data;
+ // vn->_config._priority = vn_parent->_config._def.def_priority;
+ if (vn->_config._def.tag && vn->_config._multi) {
+ vn->_config._priority = LOWEST_PRIORITY;
+ }
+ else if (vn->_config._def.def_priority == 0) {
+ vn->_config._priority = LOWEST_PRIORITY;
+ }
+ else {
+ vn->_config._priority = vn->_config._def.def_priority;
+ }
+ }
+
+
+
+
if (final_node == TRUE) {
//move defs to child...
get_term_data_values(node);