From cd7b0b3d40a5a340d5b47819f94a21c9faf23120 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 5 Sep 2012 14:36:15 -0400 Subject: added server-side client metadata object caching --- src/lib/Bcfg2/Server/Plugins/Metadata.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Metadata.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py index 774c6b1ef..5d0b35835 100644 --- a/src/lib/Bcfg2/Server/Plugins/Metadata.py +++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py @@ -729,6 +729,9 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, for hdlr in self.handlers: aname = re.sub(r'[^A-z0-9_]', '_', os.path.basename(event.filename)) if hdlr(event): + # clear the entire cache when we get an event for any + # metadata file + self.core.metadata_cache.expire() try: proc = getattr(self, "_handle_%s_event" % aname) except AttributeError: @@ -750,7 +753,6 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, self.debug_log("Group %s set as nonexistent group %s" % (gname, group)) - def set_profile(self, client, profile, addresspair, force=False): """Set group parameter for provided client.""" self.logger.info("Asserting client %s profile to %s" % @@ -888,6 +890,10 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, if False in list(self.states.values()): raise Bcfg2.Server.Plugin.MetadataRuntimeError("Metadata has not been read yet") client = client.lower() + + if client in self.core.metadata_cache: + return self.core.metadata_cache[client] + if client in self.aliases: client = self.aliases[client] @@ -967,9 +973,12 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, if len(profiles) >= 1: profile = profiles[0] - return ClientMetadata(client, profile, groups, bundles, aliases, - addresses, categories, uuid, password, version, - self.query) + rv = ClientMetadata(client, profile, groups, bundles, aliases, + addresses, categories, uuid, password, version, + self.query) + if self.core.metadata_cache_mode == 'initial': + self.core.metadata_cache[client] = rv + return rv def get_all_group_names(self): all_groups = set() -- cgit v1.2.3-1-g7c22