The fix provided does not seem to fix the error in the bug description. There are at least 3 places where it should be fixed: objects/node.py: diff --git a/nailgun/nailgun/objects/node.py b/nailgun/nailgun/objects/node.py index 8833f7c..fd2b76c 100644 --- a/nailgun/nailgun/objects/node.py +++ b/nailgun/nailgun/objects/node.py @@ -1435,7 +1435,7 @@ class NodeAttributes(object): @classmethod def distribute_node_cpus(cls, node, attributes=None): - numa_nodes = node.meta['numa_topology']['numa_nodes'] + numa_nodes = node.meta.get('numa_topology',{}).get('numa_nodes', []) components = cls.node_cpu_pinning_info(node, attributes)['components'] dpdk_nics = Node.dpdk_nics(node) @@ -1497,7 +1497,7 @@ class NodeAttributes(object): """ hugepages = collections.defaultdict(int) - numa_count = len(node.meta['numa_topology']['numa_nodes']) + numa_count = len(node.meta.get('numa_topology', {}).get('numa_nodes', [])) hugepages_attributes = cls._safe_get_hugepages(node) for name, attrs in six.iteritems(hugepages_attributes): @@ -1557,7 +1557,7 @@ class NodeAttributes(object): return {} dpdk_memory = hugepages['dpdk']['value'] - numa_nodes_len = len(node.meta['numa_topology']['numa_nodes']) + numa_nodes_len = len(node.meta.get('numa_topology', {}).get('numa_nodes', [])) return { 'ovs_socket_mem': @@ -1567,7 +1567,7 @@ class NodeAttributes(object): def distribute_hugepages(cls, node, attributes=None): hugepages = cls._safe_get_hugepages( node, attributes=attributes) - topology = node.meta['numa_topology'] + topology = node.meta.get('numa_topology', {}) # split components to 2 groups: # components that should have pages on all numa nodes (such as dpdk) @@ -1595,7 +1595,7 @@ class NodeAttributes(object): nova_cpus = set(cpu_distribution['components'].get('nova', [])) numa_values = collections.defaultdict(int) - for numa_node in topology['numa_nodes']: + for numa_node in topology.get('numa_nodes', {}): for cpu in numa_node['cpus']: if cpu in nova_cpus: numa_values[numa_node['id']] += 1 and here diff --git a/nailgun/nailgun/policy/hugepages_distribution.py b/nailgun/nailgun/policy/hugepages_distribution.py index 264f52e..d6b4412 100644 --- a/nailgun/nailgun/policy/hugepages_distribution.py +++ b/nailgun/nailgun/policy/hugepages_distribution.py @@ -132,7 +132,7 @@ def distribute_hugepages(numa_topology, components, numa_sort_func): any_comps = [Component(comp) for comp in components['any']] numa_nodes = [] - for numa_node in numa_topology['numa_nodes']: + for numa_node in numa_topology.get('numa_nodes', {}): # converting memory to KiBs memory = numa_node['memory'] // 1024 @@ -145,8 +145,8 @@ def distribute_hugepages(numa_topology, components, numa_sort_func): numa_nodes.sort(key=lambda x: numa_sort_func(x.id)) - _allocate_all(numa_nodes, all_comps) - _allocate_any(numa_nodes, any_comps) +# _allocate_all(numa_nodes, all_comps) +# _allocate_any(numa_nodes, any_comps) return sum([n.report() for n in numa_nodes], [])