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
This commit is contained in:
XiaohanZhang 2018-07-26 10:07:50 +08:00
parent 99d2a34d1f
commit e3df049cad
3 changed files with 13 additions and 6 deletions

View File

@ -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),

View File

@ -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

View File

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