Restore libvirt block storage connections on reboot.

Fixes bug 1036902.

There are a number of cases where block storage connections are not
properly restored, impacting libvirt in particular. The most common
case is a VM which has block storage attached via iSCSI, whereby the
physical system is rebooted. When the system comes back up and
starts nova-compute, the iSCSI connections are NOT recreated for the
instances slated to be resumed (assuming
resume_guests_state_on_host_boot is set).

The patch changes the compute manager to pass block_storage_info via
driver.reboot() and driver.resume_state_on_host_boot(). The fix is
actually only present in the libvirt driver. However, all the other
drivers were updated to accept the additional, optional function
arg.

With the changes in place, iSCSI connections for libvirt are
re-established after a hypervisor reboot with
resume_guests_state_on_host_boot=True and on every hard_reboot.
The latter is intended so that users have a last ditch option for
recovering their VMs without administrative involvement.

Change-Id: Idf5d53f21991a359bec6ce26ae9fe3bd61800ce3
This commit is contained in:
Rafi Khardalian
2012-08-14 13:42:22 +00:00
parent a10be151ad
commit 9fffd28cee
8 changed files with 64 additions and 19 deletions

View File

@@ -95,7 +95,8 @@ class HyperVDriver(driver.ComputeDriver):
self._vmops.spawn(context, instance, image_meta, network_info,
block_device_info)
def reboot(self, instance, network_info, reboot_type):
def reboot(self, instance, network_info, reboot_type,
block_device_info=None):
self._vmops.reboot(instance, network_info, reboot_type)
def destroy(self, instance, network_info=None, cleanup=True):