Note: the reproduction case below has been fixed by not blocking migration on config drives. However, the underlying issue of NFS not being marked
as shared storage still stands, since the 'is_shared_block_storage' data
is used elsewhere as well.
---------------------------------------------------------------------------
To reproduce:
1. Set up shared instance storage via NFS and use one of the file-based image backends
2. Boot an instance with a config drive
3. Attempt to live migrate said instance w/o doing a block migration
The issue is caused by the following lines in nova/virt/libvirt/driver.py:
if not (is_shared_instance_path and is_shared_block_storage):
# NOTE(mikal): live migration of instances using config drive is
# not supported because of a bug in libvirt (read only devices
# are not copied by libvirt). See bug/1246201
if configdrive.required_by(instance):
raise exception.NoLiveMigrationForConfigDriveInLibVirt()
The issue, I believe, was caused by commit bc45c56f1, which separated checks for shared instance directories and shared block storage backends like Ceph. The issue is that if a deployer is not using Ceph, the call to self.image_backend.backend().is_shared_block_storage() returns False. However, is_shared_block_storage should not even be considered if the image backend is a file-based one.
Fix proposed to branch: master /review. openstack. org/111082
Review: https:/