summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Metadata.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-10-29 08:50:50 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-10-29 08:57:14 -0400
commit0d7e708d7a75d0aaa9e2ff56ee6445a07998f6fe (patch)
treed166d4f5492273842772474e19f85ec3e5b06b21 /src/lib/Bcfg2/Server/Plugins/Metadata.py
parentf60ab7ec8a1d5d090c272887d777d4635f95df49 (diff)
downloadbcfg2-0d7e708d7a75d0aaa9e2ff56ee6445a07998f6fe.tar.gz
bcfg2-0d7e708d7a75d0aaa9e2ff56ee6445a07998f6fe.tar.bz2
bcfg2-0d7e708d7a75d0aaa9e2ff56ee6445a07998f6fe.zip
added database locking to Metadata
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Metadata.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Metadata.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py
index 6daf23476..4929cb52d 100644
--- a/src/lib/Bcfg2/Server/Plugins/Metadata.py
+++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py
@@ -43,7 +43,8 @@ if HAS_DJANGO:
hostname = models.CharField(max_length=255, primary_key=True)
version = models.CharField(max_length=31, null=True)
- class ClientVersions(MutableMapping, object):
+ class ClientVersions(MutableMapping,
+ Bcfg2.Server.Plugin.DatabaseBacked):
""" dict-like object to make it easier to access client bcfg2
versions from the database """
@@ -53,12 +54,15 @@ if HAS_DJANGO:
except MetadataClientModel.DoesNotExist:
raise KeyError(key)
+ @Bcfg2.Server.Plugin.DatabaseBacked.get_db_lock
def __setitem__(self, key, value):
- client, created = MetadataClientModel.objects.get_or_create(hostname=key)
+ client, created = \
+ MetadataClientModel.objects.get_or_create(hostname=key)
if created or client.version != value:
client.version = value
client.save()
+ @Bcfg2.Server.Plugin.DatabaseBacked.get_db_lock
def __delitem__(self, key):
# UserDict didn't require __delitem__, but MutableMapping
# does. we don't want deleting a client version record to
@@ -435,7 +439,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
self.negated_groups = dict()
# mapping of hostname -> version string
if self._use_db:
- self.versions = ClientVersions()
+ self.versions = ClientVersions(core, datastore)
else:
self.versions = dict()
self.uuid = {}
@@ -540,6 +544,7 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
else:
return self._add_xdata(self.groups_xml, "Bundle", bundle_name)
+ @Bcfg2.Server.Plugin.DatabaseBacked.get_db_lock
def add_client(self, client_name, attribs=None):
"""Add client to clients.xml."""
if attribs is None:
@@ -914,9 +919,10 @@ class Metadata(Bcfg2.Server.Plugin.Metadata,
if client not in self.versions or version != self.versions[client]:
self.logger.info("Setting client %s version to %s" %
(client, version))
- self.update_client(client, dict(version=version))
+ if not self._use_db:
+ self.update_client(client, dict(version=version))
+ self.clients_xml.write()
self.versions[client] = version
- self.clients_xml.write()
else:
msg = "Cannot set version on non-existent client %s" % client
self.logger.error(msg)