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')