Merge ~ltrager/maas:lp1910473 into maas:master

Proposed by Lee Trager
Status: Merged
Approved by: Adam Collard
Approved revision: b2e1da41c90501ef5322075e490ecc5f5f58880a
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:lp1910473
Merge into: maas:master
Diff against target: 88 lines (+37/-11)
2 files modified
src/metadataserver/builtin_scripts/hooks.py (+5/-3)
src/metadataserver/builtin_scripts/tests/test_hooks.py (+32/-8)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
MAAS Lander Approve
Review via email: mp+395878@code.launchpad.net

Commit message

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

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp1910473 lp:~ltrager/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: b2e1da41c90501ef5322075e490ecc5f5f58880a

review: Approve
Revision history for this message
Alberto Donato (ack) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/metadataserver/builtin_scripts/hooks.py b/src/metadataserver/builtin_scripts/hooks.py
index 6840288..d3ec6b0 100644
--- a/src/metadataserver/builtin_scripts/hooks.py
+++ b/src/metadataserver/builtin_scripts/hooks.py
@@ -652,8 +652,10 @@ def _process_lxd_resources(node, data):
652 node.memory, hugepages_size, numa_nodes_info = _parse_memory(652 node.memory, hugepages_size, numa_nodes_info = _parse_memory(
653 resources.get("memory", {}), numa_nodes653 resources.get("memory", {}), numa_nodes
654 )654 )
655 # Create or update NUMA nodes.655 # Create or update NUMA nodes. This must be kept as a dictionary as not all
656 numa_nodes = []656 # systems maintain linear continuity. e.g the PPC64 machine in our CI uses
657 # 0, 1, 16, 17.
658 numa_nodes = {}
657 for numa_index, numa_data in numa_nodes_info.items():659 for numa_index, numa_data in numa_nodes_info.items():
658 numa_node, _ = NUMANode.objects.update_or_create(660 numa_node, _ = NUMANode.objects.update_or_create(
659 node=node,661 node=node,
@@ -666,7 +668,7 @@ def _process_lxd_resources(node, data):
666 page_size=hugepages_size,668 page_size=hugepages_size,
667 defaults={"total": numa_data.hugepages},669 defaults={"total": numa_data.hugepages},
668 )670 )
669 numa_nodes.append(numa_node)671 numa_nodes[numa_index] = numa_node
670672
671 # Network interfaces673 # Network interfaces
672 # LP: #1849355 -- Don't update the node network information674 # LP: #1849355 -- Don't update the node network information
diff --git a/src/metadataserver/builtin_scripts/tests/test_hooks.py b/src/metadataserver/builtin_scripts/tests/test_hooks.py
index e991837..34df4f8 100644
--- a/src/metadataserver/builtin_scripts/tests/test_hooks.py
+++ b/src/metadataserver/builtin_scripts/tests/test_hooks.py
@@ -398,18 +398,19 @@ def make_lxd_host_info(
398 }398 }
399399
400400
401def make_lxd_pcie_device():401def make_lxd_pcie_device(numa_node=0, pci_address=None):
402 return {402 if pci_address is None:
403 "driver": factory.make_name("driver"),403 pci_address = "%s:%s:%s.%s" % (
404 "driver_version": factory.make_name("driver-version"),
405 "numa_node": 0,
406 "pci_address": "%s:%s:%s.%s"
407 % (
408 factory.make_hex_string(size=4),404 factory.make_hex_string(size=4),
409 factory.make_hex_string(size=2),405 factory.make_hex_string(size=2),
410 factory.make_hex_string(size=2),406 factory.make_hex_string(size=2),
411 factory.make_hex_string(size=1),407 factory.make_hex_string(size=1),
412 ),408 )
409 return {
410 "driver": factory.make_name("driver"),
411 "driver_version": factory.make_name("driver-version"),
412 "numa_node": numa_node,
413 "pci_address": pci_address,
413 "product": factory.make_name("product"),414 "product": factory.make_name("product"),
414 "product_id": factory.make_hex_string(size=4),415 "product_id": factory.make_hex_string(size=4),
415 "vendor": factory.make_name("vendor"),416 "vendor": factory.make_name("vendor"),
@@ -1755,6 +1756,29 @@ class TestProcessLXDResults(MAASServerTestCase):
1755 },1756 },
1756 )1757 )
17571758
1759 def test_allows_devices_on_sparse_numa_nodes(self):
1760 node = factory.make_Node()
1761 lxd_output = make_lxd_output()
1762 pci_address = lxd_output["resources"]["network"]["cards"][-1][
1763 "pci_address"
1764 ]
1765 lxd_output["resources"]["cpu"]["sockets"][-1]["cores"][-1]["threads"][
1766 -1
1767 ]["numa_node"] = 16
1768 lxd_output["resources"]["network"]["cards"][-1]["numa_node"] = 16
1769 lxd_output["resources"]["pci"] = {
1770 "devices": [
1771 make_lxd_pcie_device(numa_node=16, pci_address=pci_address)
1772 ],
1773 "total": 1,
1774 }
1775
1776 process_lxd_results(node, json.dumps(lxd_output).encode(), 0)
1777 node_device = node.node_devices.get(pci_address=pci_address)
1778
1779 self.assertEquals(16, node_device.numa_node.index)
1780 self.assertEquals(16, node_device.physical_interface.numa_node.index)
1781
1758 def test_updates_interfaces_speed(self):1782 def test_updates_interfaces_speed(self):
1759 node = factory.make_Node()1783 node = factory.make_Node()
1760 iface = factory.make_Interface(1784 iface = factory.make_Interface(

Subscribers

People subscribed via source and target branches