diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-10-29 08:50:50 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-10-29 08:57:14 -0400 |
commit | 0d7e708d7a75d0aaa9e2ff56ee6445a07998f6fe (patch) | |
tree | d166d4f5492273842772474e19f85ec3e5b06b21 /src/lib/Bcfg2/Server/Plugins/Metadata.py | |
parent | f60ab7ec8a1d5d090c272887d777d4635f95df49 (diff) | |
download | bcfg2-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.py | 16 |
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) |