From e3df049cad2b7a264acbad4d6baecbc813546e5d Mon Sep 17 00:00:00 2001 From: XiaohanZhang <15809181826@qq.com> Date: Thu, 26 Jul 2018 10:07:50 +0800 Subject: [PATCH] compute node local_gb_used include swap disks The ComputeNode.local_gb_used value is set in the ResourceTracker._update_usage() method, based on 1. root_gb in the flavor 2. any disk overhead from the virt driver 3. ephemeral_gb in the flavor The consideration of swap disk in the flavor was ignored. This patch adds swap disk to the consideration. Closes-bug: #1782386 Change-Id: I880e9daa6b97d73a0e33ac9a5bdae9bacfa89aaa --- nova/compute/resource_tracker.py | 2 ++ nova/tests/functional/test_servers.py | 8 ++------ nova/tests/unit/compute/test_resource_tracker.py | 9 +++++++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/nova/compute/resource_tracker.py b/nova/compute/resource_tracker.py index 8cf8ec10676d..0f60ac05d3a5 100644 --- a/nova/compute/resource_tracker.py +++ b/nova/compute/resource_tracker.py @@ -936,6 +936,7 @@ class ResourceTracker(object): cn.memory_mb_used += sign * mem_usage cn.local_gb_used += sign * disk_usage cn.local_gb_used += sign * usage.get('ephemeral_gb', 0) + cn.local_gb_used += sign * usage.get('swap', 0) / 1024 cn.vcpus_used += sign * vcpus_usage # free ram and disk may be negative, depending on policy: @@ -1457,6 +1458,7 @@ class ResourceTracker(object): is_bfv = compute_utils.is_volume_backed_instance( object_or_dict._context, object_or_dict) usage = {'memory_mb': object_or_dict.flavor.memory_mb, + 'swap': object_or_dict.flavor.swap, 'vcpus': object_or_dict.flavor.vcpus, 'root_gb': (0 if is_bfv else object_or_dict.flavor.root_gb), diff --git a/nova/tests/functional/test_servers.py b/nova/tests/functional/test_servers.py index 1fb7b0f9830c..6e8103a15c24 100644 --- a/nova/tests/functional/test_servers.py +++ b/nova/tests/functional/test_servers.py @@ -3649,9 +3649,7 @@ class VolumeBackedServerTest(integrated_helpers.ProviderUsageBaseTestCase): self.assertEqual(expected_usage, resources['DISK_GB']) # Ensure the compute node is reporting the correct disk usage self.assertEqual( - # TODO(efried): Due to bug #1782386, swap is not being reported. - # expected_usage, - 30, + expected_usage, self.admin_api.get_hypervisor_stats()['local_gb_used']) def test_volume_backed_no_disk_allocation(self): @@ -3664,9 +3662,7 @@ class VolumeBackedServerTest(integrated_helpers.ProviderUsageBaseTestCase): self.assertEqual(expected_usage, resources['DISK_GB']) # Ensure the compute node is reporting the correct disk usage self.assertEqual( - # TODO(efried): Due to bug #1782386, swap is not being reported. - # expected_usage, - 20, + expected_usage, self.admin_api.get_hypervisor_stats()['local_gb_used']) # Now let's hack the RequestSpec.is_bfv field to mimic migrating an diff --git a/nova/tests/unit/compute/test_resource_tracker.py b/nova/tests/unit/compute/test_resource_tracker.py index 306d2497bc70..303662524fee 100644 --- a/nova/tests/unit/compute/test_resource_tracker.py +++ b/nova/tests/unit/compute/test_resource_tracker.py @@ -2684,6 +2684,15 @@ class TestUpdateUsageFromInstance(BaseTestCase): result = self.rt._get_usage_dict(self.instance) self.assertEqual(0, result['root_gb']) + @mock.patch('nova.compute.utils.is_volume_backed_instance') + def test_get_usage_dict_include_swap( + self, mock_check_bfv): + mock_check_bfv.return_value = False + instance_with_swap = self.instance.obj_clone() + instance_with_swap.flavor.swap = 10 + result = self.rt._get_usage_dict(instance_with_swap) + self.assertEqual(10, result['swap']) + @mock.patch('nova.compute.utils.is_volume_backed_instance') @mock.patch('nova.compute.resource_tracker.ResourceTracker.' '_update_usage')