Fix bug with 0x0 core mask

Exclude ovs_pmd_core_mask from serialization if it contains no CPUs.

Change-Id: I640aba1f699137e42c05326a281d41d3153c2fb7
Closes-Bug: #1562947
This commit is contained in:
Fedor Zhadaev 2016-03-29 13:16:13 +03:00
parent 749d356184
commit b31efe6cb1
2 changed files with 32 additions and 4 deletions

View File

@ -630,10 +630,10 @@ class DeploymentHASerializer90(DeploymentHASerializer80):
for cpu in cpus[1:]:
ovs_pmd_core_mask |= 1 << cpu
serialized_node.setdefault('dpdk', {}).update({
'ovs_core_mask': hex(ovs_core_mask),
'ovs_pmd_core_mask': hex(ovs_pmd_core_mask)
})
core_masks = {'ovs_core_mask': hex(ovs_core_mask)}
if ovs_pmd_core_mask > 0:
core_masks['ovs_pmd_core_mask'] = hex(ovs_pmd_core_mask)
serialized_node.setdefault('dpdk', {}).update(core_masks)
@staticmethod
def _generate_nova_hugepages(node, serialized_node):

View File

@ -225,6 +225,34 @@ class TestDeploymentAttributesSerialization90(
serialized_node['network_metadata']['nodes'][node_name]
self.assertTrue(node_common_attrs['nova_cpu_pinning_enabled'])
def test_pinning_one_cpu_for_dpdk(self):
numa_nodes = [
{'id': 0, 'memory': 2 ** 31, 'cpus': [1, 2, 3, 4]},
{'id': 1, 'memory': 2 ** 31, 'cpus': [5, 6, 7, 8]}
]
node = self.env.create_node(cluster_id=self.cluster_db.id,
roles=['compute'])
node.meta['numa_topology']['numa_nodes'] = numa_nodes
node.attributes.update({
'cpu_pinning': {
'dpdk': {'value': 1},
}
})
objects.Cluster.prepare_for_deployment(self.cluster_db)
serialized_for_astute = self.serializer.serialize(
self.cluster_db, self.cluster_db.nodes)
serialized_node = serialized_for_astute[0]
self.assertEqual(serialized_node['dpdk']['ovs_core_mask'], '0x2')
self.assertNotIn('ovs_pmd_core_mask', serialized_node['dpdk'])
self.assertNotIn('cpu_pinning', serialized_node['nova'])
node_name = objects.Node.get_slave_name(node)
node_common_attrs = \
serialized_node['network_metadata']['nodes'][node_name]
self.assertFalse(node_common_attrs['nova_cpu_pinning_enabled'])
def test_dpdk_hugepages(self):
numa_nodes = []
for i in six.moves.range(3):