Merge ~ltrager/maas:lp1910473_2.9 into maas:2.9

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: f013898b8d930f2797ffd2e05b6b1826ac2f27da
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:lp1910473_2.9
Merge into: maas:2.9
Diff against target: 57 lines (+25/-3)
2 files modified
src/metadataserver/builtin_scripts/hooks.py (+5/-3)
src/metadataserver/builtin_scripts/tests/test_hooks.py (+20/-0)
Reviewer Review Type Date Requested Status
Lee Trager (community) Approve
Review via email: mp+395941@code.launchpad.net

Commit message

LP: #1910473 - Don't assume NUMA nodes maintain linear continuity.

Cherry pick of ed1ad1bc2

To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) wrote :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/metadataserver/builtin_scripts/hooks.py b/src/metadataserver/builtin_scripts/hooks.py
2index 057a314..96d7d12 100644
3--- a/src/metadataserver/builtin_scripts/hooks.py
4+++ b/src/metadataserver/builtin_scripts/hooks.py
5@@ -489,8 +489,10 @@ def _process_lxd_resources(node, data):
6 node.memory, hugepages_size, numa_nodes_info = _parse_memory(
7 data.get("memory", {}), numa_nodes
8 )
9- # Create or update NUMA nodes.
10- numa_nodes = []
11+ # Create or update NUMA nodes. This must be kept as a dictionary as not all
12+ # systems maintain linear continuity. e.g the PPC64 machine in our CI uses
13+ # 0, 1, 16, 17.
14+ numa_nodes = {}
15 for numa_index, numa_data in numa_nodes_info.items():
16 numa_node, _ = NUMANode.objects.update_or_create(
17 node=node,
18@@ -503,7 +505,7 @@ def _process_lxd_resources(node, data):
19 page_size=hugepages_size,
20 defaults={"total": numa_data.hugepages},
21 )
22- numa_nodes.append(numa_node)
23+ numa_nodes[numa_index] = numa_node
24
25 # Network interfaces
26 # LP: #1849355 -- Don't update the node network information
27diff --git a/src/metadataserver/builtin_scripts/tests/test_hooks.py b/src/metadataserver/builtin_scripts/tests/test_hooks.py
28index 7eb8679..bac7d2a 100644
29--- a/src/metadataserver/builtin_scripts/tests/test_hooks.py
30+++ b/src/metadataserver/builtin_scripts/tests/test_hooks.py
31@@ -1630,6 +1630,26 @@ class TestProcessLXDResults(MAASServerTestCase):
32 self.assertEqual(node_interfaces[0].numa_node, numa_nodes[0])
33 self.assertEqual(node_interfaces[1].numa_node, numa_nodes[1])
34
35+ def test_allows_devices_on_sparse_numa_nodes(self):
36+ node = factory.make_Node()
37+ create_IPADDR_OUTPUT_NAME_script(node, IP_ADDR_OUTPUT)
38+ lxd_output = make_lxd_output()
39+ lxd_output["resources"]["cpu"]["sockets"][-1]["cores"][-1]["threads"][
40+ -1
41+ ]["numa_node"] = 16
42+ lxd_output["resources"]["network"]["cards"][-1]["numa_node"] = 16
43+
44+ process_lxd_results(node, json.dumps(lxd_output).encode(), 0)
45+
46+ self.assertEqual(
47+ 16,
48+ node.interface_set.get(
49+ mac_address=lxd_output["resources"]["network"]["cards"][-1][
50+ "ports"
51+ ][-1]["address"]
52+ ).numa_node.index,
53+ )
54+
55 def test_updates_interfaces_speed(self):
56 node = factory.make_Node()
57 iface = factory.make_Interface(

Subscribers

People subscribed via source and target branches