From 0986168fe61f2d7a04a156eedddc6ad4320d64b4 Mon Sep 17 00:00:00 2001 From: licanwei Date: Thu, 25 Jul 2019 15:53:45 +0800 Subject: [PATCH] Check resource class before using check if the resource class(VCPU, memory, disk) in the return dictionary. If they are, don't need to use dict.get() with a default value because the parameters are required. Partially Implements: blueprint improve-compute-data-model Change-Id: Icb8c672d0e87e6e5f030a2222f928d1bbd069e3c --- .../decision_engine/model/collector/nova.py | 47 ++++++++++++------- .../decision_engine/cluster/test_nova_cdmc.py | 2 +- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/watcher/decision_engine/model/collector/nova.py b/watcher/decision_engine/model/collector/nova.py index 3f1fd4eb5..3b31a3b0e 100644 --- a/watcher/decision_engine/model/collector/nova.py +++ b/watcher/decision_engine/model/collector/nova.py @@ -311,40 +311,51 @@ class NovaModelBuilder(base.BaseModelBuilder): :type node: :py:class:`~novaclient.v2.hypervisors.Hypervisor` """ inventories = self.placement_helper.get_inventories(node.id) - if inventories: - vcpus = inventories[orc.VCPU].get('total', node.vcpus) - vcpu_reserved = inventories[orc.VCPU].get('reserved', 0) - vcpu_ratio = inventories[orc.VCPU].get('allocation_ratio', 1.0) - memory_mb = inventories[orc.MEMORY_MB].get( - 'total', node.memory_mb) - memory_mb_reserved = inventories[orc.MEMORY_MB].get('reserved', 0) - memory_ratio = inventories[orc.MEMORY_MB].get( - 'allocation_ratio', 1.0) - disk_capacity = inventories[orc.DISK_GB].get( - 'total', node.local_gb) - disk_gb_reserved = inventories[orc.DISK_GB].get('reserved', 0) - disk_ratio = inventories[orc.DISK_GB].get( - 'allocation_ratio', 1.0) + if inventories and orc.VCPU in inventories: + vcpus = inventories[orc.VCPU]['total'] + vcpu_reserved = inventories[orc.VCPU]['reserved'] + vcpu_ratio = inventories[orc.VCPU]['allocation_ratio'] else: vcpus = node.vcpus vcpu_reserved = 0 vcpu_ratio = 1.0 + + if inventories and orc.MEMORY_MB in inventories: + memory_mb = inventories[orc.MEMORY_MB]['total'] + memory_mb_reserved = inventories[orc.MEMORY_MB]['reserved'] + memory_ratio = inventories[orc.MEMORY_MB]['allocation_ratio'] + else: memory_mb = node.memory_mb memory_mb_reserved = 0 memory_ratio = 1.0 + + # NOTE(licanwei): A nova BP support-shared-storage-resource-provider + # will move DISK_GB from compute node to shared storage RP. + # Here may need to be updated when the nova BP released. + if inventories and orc.DISK_GB in inventories: + disk_capacity = inventories[orc.DISK_GB]['total'] + disk_gb_reserved = inventories[orc.DISK_GB]['reserved'] + disk_ratio = inventories[orc.DISK_GB]['allocation_ratio'] + else: disk_capacity = node.local_gb disk_gb_reserved = 0 disk_ratio = 1.0 usages = self.placement_helper.get_usages_for_resource_provider( node.id) - if usages: - vcpus_used = usages.get(orc.VCPU, node.vcpus_used) - memory_used = usages.get(orc.MEMORY_MB, node.memory_mb_used) - disk_used = usages.get(orc.DISK_GB, node.local_gb_used) + if usages and orc.VCPU in usages: + vcpus_used = usages[orc.VCPU] else: vcpus_used = node.vcpus_used + + if usages and orc.MEMORY_MB in usages: + memory_used = usages[orc.MEMORY_MB] + else: memory_used = node.memory_mb_used + + if usages and orc.DISK_GB in usages: + disk_used = usages[orc.DISK_GB] + else: disk_used = node.local_gb_used # build up the compute node. diff --git a/watcher/tests/decision_engine/cluster/test_nova_cdmc.py b/watcher/tests/decision_engine/cluster/test_nova_cdmc.py index aabfc5c7d..cee8fad6e 100644 --- a/watcher/tests/decision_engine/cluster/test_nova_cdmc.py +++ b/watcher/tests/decision_engine/cluster/test_nova_cdmc.py @@ -332,7 +332,7 @@ class TestNovaModelBuilder(base.TestCase): """""" mock_placement = mock.Mock(name="placement_helper") mock_placement.get_inventories.return_value = dict() - mock_placement.get_usages_for_resource_provider.return_value = dict() + mock_placement.get_usages_for_resource_provider.return_value = None m_placement_helper.return_value = mock_placement m_nova.return_value.get_aggregate_list.return_value = \ [mock.Mock(id=1, name='example'),