summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Probes.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py
index c2a928e0f..45d3c2763 100644
--- a/src/lib/Bcfg2/Server/Plugins/Probes.py
+++ b/src/lib/Bcfg2/Server/Plugins/Probes.py
@@ -197,9 +197,14 @@ class Probes(Bcfg2.Server.Plugin.Probing,
""" Write received probe data to probed.xml """
top = lxml.etree.Element("Probed")
for client, probed in sorted(self.probedata.items()):
- ctag = lxml.etree.SubElement(top, 'Client', name=client,
- timestamp=str(int(probed.timestamp)))
- for probe in sorted(probed):
+ # make a copy of probe data for this client in case it
+ # submits probe data while we're trying to write
+ # probed.xml
+ probedata = copy.copy(probed)
+ ctag = \
+ lxml.etree.SubElement(top, 'Client', name=client,
+ timestamp=str(int(probedata.timestamp)))
+ for probe in sorted(probedata):
lxml.etree.SubElement(ctag, 'Probe', name=probe,
value=str(self.probedata[client][probe]))
for group in sorted(self.cgroups[client]):
@@ -313,8 +318,8 @@ class Probes(Bcfg2.Server.Plugin.Probing,
if data.text == None:
self.logger.info("Got null response to probe %s from %s" %
(data.get('name'), client.hostname))
- self.probedata[client.hostname].update({data.get('name'):
- ProbeData('')})
+ self.probedata[client.hostname][data.get('name')] = \
+ ProbeData('')
return
dlines = data.text.split('\n')
self.logger.debug("%s:probe:%s:%s" %
@@ -327,7 +332,7 @@ class Probes(Bcfg2.Server.Plugin.Probing,
self.cgroups[client.hostname].append(newgroup)
dlines.remove(line)
dobj = ProbeData("\n".join(dlines))
- self.probedata[client.hostname].update({data.get('name'): dobj})
+ self.probedata[client.hostname][data.get('name')] = dobj
def get_additional_groups(self, meta):
return self.cgroups.get(meta.hostname, list())