summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-03-27 13:40:46 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-03-27 16:57:18 -0400
commitb90d6dccd515551829f2661a5d855f92d1e23103 (patch)
treead7d9f8adae9a3a7f3285e859fe3d7c55bbee343
parent810bed32be1edf6c79cf0952029d31339461eaf9 (diff)
downloadbcfg2-b90d6dccd515551829f2661a5d855f92d1e23103.tar.gz
bcfg2-b90d6dccd515551829f2661a5d855f92d1e23103.tar.bz2
bcfg2-b90d6dccd515551829f2661a5d855f92d1e23103.zip
XMLFileBacked: track FAM monitors separately from processed xincludes to avoid infinite loop with pseudo FAM
-rw-r--r--src/lib/Bcfg2/Server/Plugin/helpers.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/Bcfg2/Server/Plugin/helpers.py b/src/lib/Bcfg2/Server/Plugin/helpers.py
index 00b55a83b..2b878d7e2 100644
--- a/src/lib/Bcfg2/Server/Plugin/helpers.py
+++ b/src/lib/Bcfg2/Server/Plugin/helpers.py
@@ -526,6 +526,10 @@ class XMLFileBacked(FileBacked):
#: "Extra" files included in this file by XInclude.
self.extras = []
+ #: Extra FAM monitors set by this object for files included by
+ #: XInclude.
+ self.extra_monitors = []
+
if ((create or (self.create is not None and self.create))
and not os.path.exists(self.name)):
toptag = create or self.create
@@ -576,9 +580,11 @@ class XMLFileBacked(FileBacked):
parent.remove(el)
for extra in extras:
if extra != self.name and extra not in self.extras:
- self.add_monitor(extra)
+ self.extras.append(extra)
lxml.etree.SubElement(parent, xinclude, href=extra)
self._follow_xincludes(fname=extra)
+ if extra not in self.extra_monitors:
+ self.add_monitor(extra)
def Index(self):
self.xdata = lxml.etree.XML(self.data, base_url=self.name,
@@ -607,7 +613,7 @@ class XMLFileBacked(FileBacked):
:type fpath: string
:returns: None
"""
- self.extras.append(fpath)
+ self.extra_monitors.append(fpath)
if self.fam and self.should_monitor:
self.fam.AddMonitor(fpath, self)