Fixes "HyperV Cluster Driver: resize operation fails"

The resize operation fails while using the Cluster Driver because
the new resized instance is never added back to the cluster.

Change-Id: Ibcff3fe4c1733d3634ad666b527ee74fda0899f9
Closes-Bug: #1624464
This commit is contained in:
Adelina Tuvenie 2016-09-16 19:16:20 +03:00
parent 5a3f2717a0
commit 94558ef556
2 changed files with 74 additions and 0 deletions

View File

@ -42,6 +42,29 @@ class HyperVClusterDriver(driver.HyperVDriver):
context, instance, network_info, block_device_info,
destroy_disks, migrate_data)
def migrate_disk_and_power_off(self, context, instance, dest,
flavor, network_info,
block_device_info=None,
timeout=0, retry_interval=0):
self._clops.remove_from_cluster(instance)
super(HyperVClusterDriver, self).migrate_disk_and_power_off(
context, instance, dest, flavor, network_info,
block_device_info, timeout, retry_interval)
def finish_migration(self, context, migration, instance, disk_info,
network_info, image_meta, resize_instance,
block_device_info=None, power_on=True):
super(HyperVClusterDriver, self).finish_migration(
context, migration, instance, disk_info, network_info,
image_meta, resize_instance, block_device_info, power_on)
self._clops.add_to_cluster(instance)
def finish_revert_migration(self, context, instance, network_info,
block_device_info=None, power_on=True):
super(HyperVClusterDriver, self).finish_revert_migration(
context, instance, network_info, block_device_info, power_on)
self._clops.add_to_cluster(instance)
def post_live_migration_at_destination(self, context, instance,
network_info,
block_migration=False,

View File

@ -65,6 +65,57 @@ class HyperVClusterTestCase(test_base.HyperVBaseTestCase):
mock.sentinel.network_info, mock.sentinel.block_dev_info,
mock.sentinel.destroy_disks, mock.sentinel.migrate_data)
@mock.patch.object(base_driver.HyperVDriver, 'migrate_disk_and_power_off')
def test_migrate_disk_and_power_off(self, mock_superclass_migrate):
self.driver.migrate_disk_and_power_off(self.context,
mock.sentinel.fake_instance,
mock.sentinel.destination,
mock.sentinel.flavor,
mock.sentinel.network_info,
mock.sentinel.block_dev_info,
mock.sentinel.timeout,
mock.sentinel.retry_interval)
self.driver._clops.remove_from_cluster.assert_called_once_with(
mock.sentinel.fake_instance)
mock_superclass_migrate.assert_called_once_with(
self.context, mock.sentinel.fake_instance,
mock.sentinel.destination, mock.sentinel.flavor,
mock.sentinel.network_info, mock.sentinel.block_dev_info,
mock.sentinel.timeout, mock.sentinel.retry_interval)
@mock.patch.object(base_driver.HyperVDriver, 'finish_migration')
def test_finish_migration(self, mock_superclass_finish_migration):
self.driver.finish_migration(self.context,
mock.sentinel.migration,
mock.sentinel.fake_instance,
mock.sentinel.disk_info,
mock.sentinel.network_info,
mock.sentinel.image_meta,
mock.sentinel.resize_instance,
mock.sentinel.block_dev_info,
mock.sentinel.power_on)
mock_superclass_finish_migration.assert_called_once_with(
self.context, mock.sentinel.migration, mock.sentinel.fake_instance,
mock.sentinel.disk_info, mock.sentinel.network_info,
mock.sentinel.image_meta, mock.sentinel.resize_instance,
mock.sentinel.block_dev_info, mock.sentinel.power_on)
self.driver._clops.add_to_cluster.assert_called_once_with(
mock.sentinel.fake_instance)
@mock.patch.object(base_driver.HyperVDriver, 'finish_revert_migration')
def test_finish_revert_migration(self, mock_superclass_finish_rev_migr):
self.driver.finish_revert_migration(self.context,
mock.sentinel.fake_instance,
mock.sentinel.network_info,
mock.sentinel.block_dev_info,
mock.sentinel.power_on)
mock_superclass_finish_rev_migr.assert_called_once_with(
self.context, mock.sentinel.fake_instance,
mock.sentinel.network_info, mock.sentinel.block_dev_info,
mock.sentinel.power_on)
self.driver._clops.add_to_cluster.assert_called_once_with(
mock.sentinel.fake_instance)
@mock.patch.object(base_driver.HyperVDriver,
'post_live_migration_at_destination')
def test_post_live_migration_at_destination(self, mock_superclass_post):