Merge ~ltrager/maas:lp1878923_lp1878685 into maas:master

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: e92ccb39d681fdb00906faf882c5af0b9fbb2057
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:lp1878923_lp1878685
Merge into: maas:master
Diff against target: 101 lines (+46/-10)
3 files modified
src/machine-resources/src/machine-resources/Gopkg.lock (+2/-1)
src/metadataserver/builtin_scripts/hooks.py (+8/-9)
src/metadataserver/builtin_scripts/tests/test_hooks.py (+36/-0)
Reviewer Review Type Date Requested Status
Dougal Matthews (community) Approve
MAAS Lander Approve
Review via email: mp+384202@code.launchpad.net

Commit message

LP: #1878923, #1878685 - Fix incorrect memory detection.

LXD was only detecting the amount of available memory in user space.
Memory reserved by the kernel was not shown as available. This caused MAAS
to show slightly less RAM then the system actually had.

MAAS was assuming that a NUMA node always had memory assigned to it. When
0 memory was assigned to a node commissioning would raise an exception and
fail.

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

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

STATUS: SUCCESS
COMMIT: 5c22723945be2ffa8359f9d50569030cf2fb93fd

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: SUCCESS
COMMIT: e92ccb39d681fdb00906faf882c5af0b9fbb2057

review: Approve
Revision history for this message
Dougal Matthews (d0ugal) wrote :

lgtm

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/machine-resources/src/machine-resources/Gopkg.lock b/src/machine-resources/src/machine-resources/Gopkg.lock
2index e4b0113..6c2f652 100644
3--- a/src/machine-resources/src/machine-resources/Gopkg.lock
4+++ b/src/machine-resources/src/machine-resources/Gopkg.lock
5@@ -24,9 +24,10 @@
6 revision = "3fe23663418fc1d724868c84f21b7519bbac7441"
7
8 [[projects]]
9+ branch = "master"
10 name = "github.com/lxc/lxd"
11 packages = ["lxd/resources","shared","shared/api","shared/cancel","shared/ioprogress","shared/logger","shared/osarch","shared/units","shared/usbid","shared/version"]
12- version = "lxd-4.0.1"
13+ revision = "7516f0a2968b025efd1ea5066e78b16d6646b1c8"
14
15 [[projects]]
16 name = "github.com/mitchellh/go-homedir"
17diff --git a/src/metadataserver/builtin_scripts/hooks.py b/src/metadataserver/builtin_scripts/hooks.py
18index a65d06a..76c2614 100644
19--- a/src/metadataserver/builtin_scripts/hooks.py
20+++ b/src/metadataserver/builtin_scripts/hooks.py
21@@ -438,7 +438,7 @@ def _process_lxd_resources(node, data):
22 data
23 )
24 # Update memory.
25- node.memory, numa_nodes = _parse_memory(data, numa_nodes)
26+ node.memory, numa_nodes = _parse_memory(data.get("memory", {}), numa_nodes)
27
28 # Create or update NUMA nodes.
29 numa_nodes = [
30@@ -470,17 +470,16 @@ def _process_lxd_resources(node, data):
31 _process_system_information(node, data.get("system", {}))
32
33
34-def _parse_memory(data, numa_nodes):
35- total_memory = data.get("memory", {}).get("total", 0)
36+def _parse_memory(memory, numa_nodes):
37+ total_memory = memory.get("total", 0)
38 default_numa_node = {"numa_node": 0, "total": total_memory}
39- for memory_node in data.get("memory", {}).get(
40- "nodes", [default_numa_node]
41- ):
42- numa_nodes[memory_node["numa_node"]]["memory"] = (
43- memory_node["total"] / 1024 / 1024
44+
45+ for memory_node in memory.get("nodes", [default_numa_node]):
46+ numa_nodes[memory_node["numa_node"]]["memory"] = int(
47+ memory_node.get("total", 0) / 1024 ** 2
48 )
49
50- return total_memory / 1024 / 1024, numa_nodes
51+ return int(total_memory / 1024 ** 2), numa_nodes
52
53
54 def get_tags_from_block_info(block_info):
55diff --git a/src/metadataserver/builtin_scripts/tests/test_hooks.py b/src/metadataserver/builtin_scripts/tests/test_hooks.py
56index dfc7d89..de3424a 100644
57--- a/src/metadataserver/builtin_scripts/tests/test_hooks.py
58+++ b/src/metadataserver/builtin_scripts/tests/test_hooks.py
59@@ -1412,6 +1412,42 @@ class TestProcessLXDResults(MAASServerTestCase):
60 for numa_node in numa_nodes:
61 self.assertEqual(int(total_memory / 1024 / 1024), numa_node.memory)
62
63+ def test__accepts_numa_node_zero_memory(self):
64+ # Regression test for LP:1878923
65+ node = factory.make_Node()
66+ self.patch(hooks_module, "update_node_network_information")
67+ data = make_lxd_output()
68+ data["resources"]["memory"] = {
69+ "nodes": [
70+ {
71+ "numa_node": 0,
72+ "hugepages_used": 0,
73+ "hugepages_total": 0,
74+ "used": 1314131968,
75+ "total": 33720463360,
76+ },
77+ {
78+ "numa_node": 1,
79+ "hugepages_used": 0,
80+ "hugepages_total": 0,
81+ "used": 0,
82+ "total": 0,
83+ },
84+ ],
85+ "hugepages_total": 0,
86+ "hugepages_used": 0,
87+ "hugepages_size": 2097152,
88+ "used": 602902528,
89+ "total": 33720463360,
90+ }
91+
92+ process_lxd_results(node, json.dumps(data).encode(), 0)
93+
94+ self.assertEquals(32158, node.memory)
95+ self.assertItemsEqual(
96+ [32158, 0], [numa.memory for numa in node.numanode_set.all()]
97+ )
98+
99 def test__updates_cpu_numa_nodes(self):
100 node = factory.make_Node()
101 self.patch(hooks_module, "update_node_network_information")

Subscribers

People subscribed via source and target branches