Merge "Correct memory validation for live migration"

This commit is contained in:
Jenkins 2015-11-16 13:51:18 +00:00 committed by Gerrit Code Review
commit 28053572c9
2 changed files with 23 additions and 7 deletions

View File

@ -110,9 +110,17 @@ class LiveMigrationTask(base.TaskBase):
instance_id=self.instance.uuid, host=self.destination) instance_id=self.instance.uuid, host=self.destination)
def _check_destination_has_enough_memory(self): def _check_destination_has_enough_memory(self):
avail = self._get_compute_info(self.destination)['free_ram_mb'] compute = self._get_compute_info(self.destination)
free_ram_mb = compute.free_ram_mb
total_ram_mb = compute.memory_mb
mem_inst = self.instance.memory_mb mem_inst = self.instance.memory_mb
# NOTE(sbauza): Now the ComputeNode object reports an allocation ratio
# that can be provided by the compute_node if new or by the controller
ram_ratio = compute.ram_allocation_ratio
# NOTE(sbauza): Mimic the RAMFilter logic in order to have the same
# ram validation
avail = total_ram_mb * ram_ratio - (total_ram_mb - free_ram_mb)
if not mem_inst or avail <= mem_inst: if not mem_inst or avail <= mem_inst:
instance_uuid = self.instance.uuid instance_uuid = self.instance.uuid
dest = self.destination dest = self.destination

View File

@ -150,11 +150,13 @@ class LiveMigrationTaskTestCase(test.NoDBTestCase):
objects.Service.get_by_compute_host( objects.Service.get_by_compute_host(
self.context, self.destination).AndReturn("service") self.context, self.destination).AndReturn("service")
self.task.servicegroup_api.service_is_up("service").AndReturn(True) self.task.servicegroup_api.service_is_up("service").AndReturn(True)
hypervisor_details = { hypervisor_details = objects.ComputeNode(
"hypervisor_type": "a", hypervisor_type="a",
"hypervisor_version": 6.1, hypervisor_version=6.1,
"free_ram_mb": 513 free_ram_mb=513,
} memory_mb=512,
ram_allocation_ratio=1.0,
)
self.task._get_compute_info(self.destination)\ self.task._get_compute_info(self.destination)\
.AndReturn(hypervisor_details) .AndReturn(hypervisor_details)
self.task._get_compute_info(self.instance_host)\ self.task._get_compute_info(self.instance_host)\
@ -194,9 +196,15 @@ class LiveMigrationTaskTestCase(test.NoDBTestCase):
self.task._check_host_is_up(self.destination) self.task._check_host_is_up(self.destination)
objects.ComputeNode.get_first_node_by_host_for_old_compat(self.context, objects.ComputeNode.get_first_node_by_host_for_old_compat(self.context,
self.destination).AndReturn({"free_ram_mb": 511}) self.destination).AndReturn(
objects.ComputeNode(free_ram_mb=513,
memory_mb=1024,
ram_allocation_ratio=0.9,
))
self.mox.ReplayAll() self.mox.ReplayAll()
# free_ram is bigger than instance.ram (512) but the allocation ratio
# reduces the total available RAM to 410MB (1024 * 0.9 - (1024 - 513))
self.assertRaises(exception.MigrationPreCheckError, self.assertRaises(exception.MigrationPreCheckError,
self.task._check_requested_destination) self.task._check_requested_destination)