From cd195419a63977001dcd4fb9dcc0b96bbed13da9 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Fri, 23 Oct 2009 10:29:37 -0400 Subject: [PATCH] SimpleConfigReader: ips are partitioned by link We were already half-doing it, but this completes the process. 1) We don't maintain a list of ips or an ip->instance map 2) We add a new link,ip->instance map (link->ips list we had) 3) We add the link parameter to GetInstanceByIp (making it GetInstanceByLinkIp) 4) We change the GetInstanceByIp caller to pass None as link (thus for now using only the default link) Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/confd/querylib.py | 2 +- lib/ssconf.py | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py index 04549b98b..5e7370e12 100644 --- a/lib/confd/querylib.py +++ b/lib/confd/querylib.py @@ -161,7 +161,7 @@ class InstanceIpToNodePrimaryIpQuery(ConfdQuery): pnodes_list = [] for instance_ip in instances_list: - instance = self.reader.GetInstanceByIp(instance_ip) + instance = self.reader.GetInstanceByLinkIp(instance_ip, None) if not instance: logging.debug("Invalid instance IP: %s" % instance) pnodes_list.append(QUERY_UNKNOWN_ENTRY_ERROR) diff --git a/lib/ssconf.py b/lib/ssconf.py index 9b4eaa094..bf273df85 100644 --- a/lib/ssconf.py +++ b/lib/ssconf.py @@ -59,9 +59,8 @@ class SimpleConfigReader(object): self._last_size = None self._config_data = None - self._instances_ips = None self._inst_ips_by_link = None - self._ip_to_instance = None + self._ip_to_inst_by_link = None self._mc_primary_ips = None self._nodes_primary_ips = None @@ -106,7 +105,7 @@ class SimpleConfigReader(object): raise errors.ConfigurationError("Cannot load config file %s: %s" % (self._file_name, err)) - self._ip_to_instance = {} + self._ip_to_inst_by_link = {} self._instances_ips = [] self._inst_ips_by_link = {} c_nparams = self._config_data['cluster']['nicparams'][constants.PP_DEFAULT] @@ -114,11 +113,11 @@ class SimpleConfigReader(object): instance = self._config_data['instances'][iname] for nic in instance['nics']: if 'ip' in nic and nic['ip']: - self._instances_ips.append(nic['ip']) - self._ip_to_instance[nic['ip']] = iname params = objects.FillDict(c_nparams, nic['nicparams']) if not params['link'] in self._inst_ips_by_link: self._inst_ips_by_link[params['link']] = [] + self._ip_to_inst_by_link[params['link']] = {} + self._ip_to_inst_by_link[params['link']][nic['ip']] = iname self._inst_ips_by_link[params['link']].append(nic['ip']) self._nodes_primary_ips = [] @@ -185,10 +184,14 @@ class SimpleConfigReader(object): offline = self._config_data["nodes"][node]["offline"] return master_candidate, drained, offline - def GetInstanceByIp(self, ip): - if ip not in self._ip_to_instance: + def GetInstanceByLinkIp(self, ip, link): + if not link: + link = self.GetDefaultNicLink() + if not link in self._ip_to_inst_by_link: return None - return self._ip_to_instance[ip] + if not ip in self._ip_to_inst_by_link[link]: + return None + return self._ip_to_inst_by_link[link][ip] def GetNodePrimaryIp(self, node): """Get a node's primary ip @@ -223,8 +226,9 @@ class SimpleConfigReader(object): return self._mc_primary_ips def GetInstancesIps(self, link): - if link is None: - return self._instances_ips + if not link: + link = self.GetDefaultNicLink() + if link in self._inst_ips_by_link: return self._inst_ips_by_link[link] else: -- GitLab