Merge ~alexsander-souza/maas:lp2028284_to_3_3 into maas:3.3

Proposed by Alexsander de Souza
Status: Merged
Approved by: Alexsander de Souza
Approved revision: b2dd06d9af4aca4a143112b27fd8409915939b10
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~alexsander-souza/maas:lp2028284_to_3_3
Merge into: maas:3.3
Diff against target: 130 lines (+63/-15)
3 files modified
src/maasserver/models/bmc.py (+23/-11)
src/maasserver/models/tests/test_bmc.py (+34/-0)
src/provisioningserver/drivers/pod/__init__.py (+6/-4)
Reviewer Review Type Date Requested Status
Adam Collard (community) Approve
MAAS Lander Approve
Review via email: mp+450523@code.launchpad.net

Commit message

don't save hints if nothing changed

fixes LP#2028284

(cherry picked from commit 47c507d3867ba3621c7669cfacefd910757a81ae)

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

UNIT TESTS
-b lp2028284_to_3_3 lp:~alexsander-souza/maas/+git/maas into -b 3.3 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: b2dd06d9af4aca4a143112b27fd8409915939b10

review: Approve
Revision history for this message
Adam Collard (adam-collard) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/maasserver/models/bmc.py b/src/maasserver/models/bmc.py
index f1c8356..1035215 100644
--- a/src/maasserver/models/bmc.py
+++ b/src/maasserver/models/bmc.py
@@ -69,7 +69,10 @@ from maasserver.utils.orm import transactional
69from maasserver.utils.threads import deferToDatabase69from maasserver.utils.threads import deferToDatabase
70from metadataserver.enum import RESULT_TYPE70from metadataserver.enum import RESULT_TYPE
71from provisioningserver.drivers import SETTING_SCOPE71from provisioningserver.drivers import SETTING_SCOPE
72from provisioningserver.drivers.pod import InterfaceAttachType72from provisioningserver.drivers.pod import (
73 DiscoveredPodHints,
74 InterfaceAttachType,
75)
73from provisioningserver.drivers.power.registry import (76from provisioningserver.drivers.power.registry import (
74 PowerDriverRegistry,77 PowerDriverRegistry,
75 sanitise_power_parameters,78 sanitise_power_parameters,
@@ -800,21 +803,30 @@ class Pod(BMC):
800 def sync_hints(self, discovered_hints, cluster=None):803 def sync_hints(self, discovered_hints, cluster=None):
801 """Sync the hints with `discovered_hints`."""804 """Sync the hints with `discovered_hints`."""
802805
806 def update_hint(
807 hints: PodHints, discovered: DiscoveredPodHints, attr: str
808 ) -> bool:
809 new_val = getattr(discovered, attr)
810 if new_val != DiscoveredPodHints.UNDEFINED and new_val != getattr(
811 hints, attr
812 ):
813 setattr(hints, attr, new_val)
814 return True
815 return False
816
817 changed = False
803 try:818 try:
804 hints = self.hints819 hints = self.hints
805 except PodHints.DoesNotExist:820 except PodHints.DoesNotExist:
806 hints = self.hints = PodHints()821 hints = self.hints = PodHints()
807 if discovered_hints.cores != -1:822 changed = True
808 hints.cores = discovered_hints.cores823 for a in ["cores", "cpu_speed", "memory", "local_storage"]:
809 if discovered_hints.cpu_speed != -1:824 changed |= update_hint(hints, discovered_hints, a)
810 hints.cpu_speed = discovered_hints.cpu_speed825 if cluster is not None and hints.cluster != cluster:
811 if discovered_hints.memory != -1:
812 hints.memory = discovered_hints.memory
813 if discovered_hints.local_storage != -1:
814 hints.local_storage = discovered_hints.local_storage
815 if cluster is not None:
816 hints.cluster = cluster826 hints.cluster = cluster
817 hints.save()827 changed = True
828 if changed:
829 hints.save()
818830
819 def add_tag(self, tag):831 def add_tag(self, tag):
820 """Add tag to Pod."""832 """Add tag to Pod."""
diff --git a/src/maasserver/models/tests/test_bmc.py b/src/maasserver/models/tests/test_bmc.py
index b766810..0e56f59 100644
--- a/src/maasserver/models/tests/test_bmc.py
+++ b/src/maasserver/models/tests/test_bmc.py
@@ -44,6 +44,7 @@ from maasserver.models.fabric import Fabric
44from maasserver.models.filesystem import Filesystem44from maasserver.models.filesystem import Filesystem
45from maasserver.models.node import Controller, Machine, Node45from maasserver.models.node import Controller, Machine, Node
46from maasserver.models.physicalblockdevice import PhysicalBlockDevice46from maasserver.models.physicalblockdevice import PhysicalBlockDevice
47from maasserver.models.podhints import PodHints
47from maasserver.models.podstoragepool import PodStoragePool48from maasserver.models.podstoragepool import PodStoragePool
48from maasserver.models.resourcepool import ResourcePool49from maasserver.models.resourcepool import ResourcePool
49from maasserver.models.staticipaddress import StaticIPAddress50from maasserver.models.staticipaddress import StaticIPAddress
@@ -3035,6 +3036,39 @@ class TestPod(MAASServerTestCase, PodTestMixin):
3035 self.assertEqual(vm.bmc_id, intended_bmc.id)3036 self.assertEqual(vm.bmc_id, intended_bmc.id)
30363037
30373038
3039class TestPodHints(MAASServerTestCase, PodTestMixin):
3040 def test_sync_hints_doesnt_save_empty_hints(self):
3041 cluster = factory.make_VMCluster(pods=0)
3042 discovered = self.make_discovered_pod()
3043 pod1 = Pod(
3044 power_type="lxd",
3045 power_parameters={"project": factory.make_name("project")},
3046 )
3047 pod1.save()
3048 mock_hint_save = self.patch(PodHints, "save")
3049 pod1.sync_hints(discovered.hints, cluster=cluster)
3050 mock_hint_save.assert_called()
3051 mock_hint_save.reset_mock()
3052 blank = DiscoveredPodHints()
3053 pod1.sync_hints(blank)
3054 mock_hint_save.assert_not_called()
3055
3056 def test_sync_hints_doesnt_save_same_hints(self):
3057 cluster = factory.make_VMCluster(pods=0)
3058 discovered = self.make_discovered_pod()
3059 pod1 = Pod(
3060 power_type="lxd",
3061 power_parameters={"project": factory.make_name("project")},
3062 )
3063 pod1.save()
3064 mock_hint_save = self.patch(PodHints, "save")
3065 pod1.sync_hints(discovered.hints, cluster=cluster)
3066 mock_hint_save.assert_called()
3067 mock_hint_save.reset_mock()
3068 pod1.sync_hints(discovered.hints)
3069 mock_hint_save.assert_not_called()
3070
3071
3038class TestPodDelete(MAASTransactionServerTestCase, PodTestMixin):3072class TestPodDelete(MAASTransactionServerTestCase, PodTestMixin):
3039 def test_delete_is_not_allowed(self):3073 def test_delete_is_not_allowed(self):
3040 pod = factory.make_Pod()3074 pod = factory.make_Pod()
diff --git a/src/provisioningserver/drivers/pod/__init__.py b/src/provisioningserver/drivers/pod/__init__.py
index 815e076..197909c 100644
--- a/src/provisioningserver/drivers/pod/__init__.py
+++ b/src/provisioningserver/drivers/pod/__init__.py
@@ -259,10 +259,12 @@ class DiscoveredPodHints:
259 Limiting the maximum cores allow request on a per machine basis.259 Limiting the maximum cores allow request on a per machine basis.
260 """260 """
261261
262 cores = attr.ib(converter=int, default=-1)262 UNDEFINED = -1
263 cpu_speed = attr.ib(converter=int, default=-1)263
264 memory = attr.ib(converter=int, default=-1)264 cores = attr.ib(converter=int, default=UNDEFINED)
265 local_storage = attr.ib(converter=int, default=-1)265 cpu_speed = attr.ib(converter=int, default=UNDEFINED)
266 memory = attr.ib(converter=int, default=UNDEFINED)
267 local_storage = attr.ib(converter=int, default=UNDEFINED)
266268
267269
268@attr.s270@attr.s

Subscribers

People subscribed via source and target branches