Comment 13 for bug 1594443

Revision history for this message
Vladimir Kuklin (vkuklin) wrote :

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], [])