Merge "VMware: disk_io_limits settings are not reflected when resize"

This commit is contained in:
Zuul 2019-12-09 22:08:45 +00:00 committed by Gerrit Code Review
commit 2d7ff4d22f
2 changed files with 24 additions and 9 deletions

View File

@ -785,7 +785,8 @@ class VMwareVMOpsTestCase(test.NoDBTestCase):
'[fake] uuid/root.vmdk')
mock_attach_disk.assert_called_once_with(
'fake-ref', self._instance, 'fake-adapter', 'fake-disk',
'[fake] uuid/root.vmdk')
'[fake] uuid/root.vmdk',
disk_io_limits=extra_specs.disk_io_limits)
fake_remove_ephemerals_and_swap.assert_called_once_with('fake-ref')
fake_resize_create_ephemerals_and_swap.assert_called_once_with(
'fake-ref', self._instance, None)
@ -948,10 +949,11 @@ class VMwareVMOpsTestCase(test.NoDBTestCase):
'vm-ref', 'fake-spec')
@mock.patch.object(vmops.VMwareVMOps, '_extend_virtual_disk')
@mock.patch.object(vmops.VMwareVMOps, '_get_extra_specs')
@mock.patch.object(ds_util, 'disk_move')
@mock.patch.object(ds_util, 'disk_copy')
def test_resize_disk(self, fake_disk_copy, fake_disk_move,
fake_extend):
fake_get_extra_specs, fake_extend):
datastore = ds_obj.Datastore(ref='fake-ref', name='fake')
device = vmwareapi_fake.DataObject()
backing = vmwareapi_fake.DataObject()
@ -970,6 +972,8 @@ class VMwareVMOpsTestCase(test.NoDBTestCase):
mock_attach_disk = self._vmops._volumeops.attach_disk_to_vm
mock_detach_disk = self._vmops._volumeops.detach_disk_from_vm
extra_specs = vm_util.ExtraSpecs()
fake_get_extra_specs.return_value = extra_specs
flavor = fake_flavor.fake_flavor_obj(self._context,
root_gb=self._instance.flavor.root_gb + 1)
self._vmops._resize_disk(self._instance, 'fake-ref', vmdk, flavor)
@ -994,7 +998,8 @@ class VMwareVMOpsTestCase(test.NoDBTestCase):
mock_attach_disk.assert_called_once_with(
'fake-ref', self._instance, 'fake-adapter', 'fake-disk',
'[fake] uuid/root.vmdk')
'[fake] uuid/root.vmdk',
disk_io_limits=extra_specs.disk_io_limits)
@mock.patch.object(vm_util, 'detach_devices_from_vm')
@mock.patch.object(vm_util, 'get_swap')

View File

@ -1372,6 +1372,8 @@ class VMwareVMOps(object):
vm_util.reconfigure_vm(self._session, vm_ref, vm_resize_spec)
def _resize_disk(self, instance, vm_ref, vmdk, flavor):
extra_specs = self._get_extra_specs(instance.flavor,
instance.image_meta)
if (flavor.root_gb > instance.flavor.root_gb and
flavor.root_gb > vmdk.capacity_in_bytes / units.Gi):
root_disk_in_kb = flavor.root_gb * units.Mi
@ -1392,9 +1394,12 @@ class VMwareVMOps(object):
original_disk)
ds_util.disk_move(self._session, dc_info.ref, resized_disk,
vmdk.path)
self._volumeops.attach_disk_to_vm(vm_ref, instance,
vmdk.adapter_type,
vmdk.disk_type, vmdk.path)
else:
self._volumeops.detach_disk_from_vm(vm_ref, instance, vmdk.device)
self._volumeops.attach_disk_to_vm(
vm_ref, instance, vmdk.adapter_type, vmdk.disk_type, vmdk.path,
disk_io_limits=extra_specs.disk_io_limits)
def _remove_ephemerals_and_swap(self, vm_ref):
devices = vm_util.get_ephemerals(self._session, vm_ref)
@ -1492,6 +1497,8 @@ class VMwareVMOps(object):
def _revert_migration_update_disks(self, vm_ref, instance, vmdk,
block_device_info):
extra_specs = self._get_extra_specs(instance.flavor,
instance.image_meta)
ds_ref = vmdk.device.backing.datastore
dc_info = self.get_datacenter_ref_and_name(ds_ref)
folder = ds_obj.DatastorePath.parse(vmdk.path).dirname
@ -1507,9 +1514,12 @@ class VMwareVMOps(object):
ds_util.disk_delete(self._session, dc_info.ref, vmdk.path)
ds_util.disk_move(self._session, dc_info.ref,
str(original_disk), vmdk.path)
self._volumeops.attach_disk_to_vm(vm_ref, instance,
vmdk.adapter_type,
vmdk.disk_type, vmdk.path)
else:
self._volumeops.detach_disk_from_vm(vm_ref, instance,
vmdk.device)
self._volumeops.attach_disk_to_vm(
vm_ref, instance, vmdk.adapter_type, vmdk.disk_type, vmdk.path,
disk_io_limits=extra_specs.disk_io_limits)
# Reconfigure ephemerals
self._remove_ephemerals_and_swap(vm_ref)
self._resize_create_ephemerals_and_swap(vm_ref, instance,