diff --git a/nova/conf/workarounds.py b/nova/conf/workarounds.py index 0ea01be484c7..af1abc7ce4fa 100644 --- a/nova/conf/workarounds.py +++ b/nova/conf/workarounds.py @@ -270,36 +270,6 @@ Related options: * ``compute_driver`` (libvirt) * ``[libvirt]/images_type`` (rbd) -"""), - cfg.BoolOpt( - 'rbd_volume_local_attach', - default=False, - deprecated_for_removal=True, - deprecated_since='23.0.0', - deprecated_reason=""" -The underlying performance regression within libgcrypt that prompted this -workaround has been resolved as of 1.8.5 -""", - help=""" -Attach RBD Cinder volumes to the compute as host block devices. - -When enabled this option instructs os-brick to connect RBD volumes locally on -the compute host as block devices instead of natively through QEMU. - -This workaround does not currently support extending attached volumes. - -This can be used with the disable_native_luksv1 workaround configuration -option to avoid the recently discovered performance issues found within the -libgcrypt library. - -This workaround is temporary and will be removed during the W release once -all impacted distributions have been able to update their versions of the -libgcrypt library. - -Related options: - -* ``compute_driver`` (libvirt) -* ``disable_qemu_native_luksv1`` (workarounds) """), cfg.BoolOpt('reserve_disk_resource_for_image_cache', default=False, diff --git a/nova/tests/unit/virt/libvirt/volume/test_net.py b/nova/tests/unit/virt/libvirt/volume/test_net.py index b92c1f0cb912..a694351629e6 100644 --- a/nova/tests/unit/virt/libvirt/volume/test_net.py +++ b/nova/tests/unit/virt/libvirt/volume/test_net.py @@ -214,49 +214,3 @@ class LibvirtNetVolumeDriverTestCase( requested_size) self.assertEqual(requested_size, new_size) - - def test_libvirt_rbd_driver_block_connect(self): - self.flags(rbd_volume_local_attach=True, group='workarounds') - connection_info = self.rbd_connection(self.vol) - libvirt_driver = net.LibvirtNetVolumeDriver(self.fake_host) - libvirt_driver.connector.connect_volume = mock.MagicMock( - return_value = {'path': mock.sentinel.rbd_dev}) - libvirt_driver.connect_volume(connection_info, mock.sentinel.instance) - - # Assert that the connector is called correctly and device_path updated - libvirt_driver.connector.connect_volume.assert_called_once_with( - connection_info['data']) - - def test_libvirt_rbd_driver_block_disconnect(self): - self.flags(rbd_volume_local_attach=True, group='workarounds') - connection_info = self.rbd_connection(self.vol) - libvirt_driver = net.LibvirtNetVolumeDriver(self.fake_host) - libvirt_driver.connector.disconnect_volume = mock.MagicMock() - libvirt_driver.disconnect_volume(connection_info, - mock.sentinel.instance) - - # Assert that the connector is called correctly - libvirt_driver.connector.disconnect_volume.assert_called_once_with( - connection_info['data'], None) - - def test_libvirt_rbd_driver_block_config(self): - self.flags(rbd_volume_local_attach=True, group='workarounds') - connection_info = self.rbd_connection(self.vol) - connection_info['data']['device_path'] = '/dev/rbd0' - libvirt_driver = net.LibvirtNetVolumeDriver(self.fake_host) - conf = libvirt_driver.get_config(connection_info, self.disk_info) - - # Assert that the returned config is for a RBD block device - self.assertEqual('block', conf.source_type) - self.assertEqual('/dev/rbd0', conf.source_path) - self.assertEqual('native', conf.driver_io) - - def test_libvirt_rbd_driver_block_extend(self): - self.flags(rbd_volume_local_attach=True, group='workarounds') - connection_info = self.rbd_connection(self.vol) - libvirt_driver = net.LibvirtNetVolumeDriver(self.fake_host) - - # Assert NotImplementedError is raised for extend_volume - self.assertRaises(NotImplementedError, libvirt_driver.extend_volume, - connection_info, mock.sentinel.instance, - mock.sentinel.requested_size) diff --git a/nova/virt/libvirt/volume/net.py b/nova/virt/libvirt/volume/net.py index ef065c8f5aeb..b59682eaa98e 100644 --- a/nova/virt/libvirt/volume/net.py +++ b/nova/virt/libvirt/volume/net.py @@ -10,13 +10,9 @@ # License for the specific language governing permissions and limitations # under the License. -from os_brick import exception as os_brick_exception -from os_brick import initiator -from os_brick.initiator import connector from oslo_log import log as logging import nova.conf -from nova import utils from nova.virt.libvirt.volume import volume as libvirt_volume @@ -30,9 +26,6 @@ class LibvirtNetVolumeDriver(libvirt_volume.LibvirtBaseVolumeDriver): super(LibvirtNetVolumeDriver, self).__init__(host, is_block_dev=False) self.connector = None - if CONF.workarounds.rbd_volume_local_attach: - self.connector = connector.InitiatorConnector.factory( - initiator.RBD, utils.get_root_helper(), do_local_attach=True) def _set_auth_config_rbd(self, conf, netdisk_properties): # The rbd volume driver in cinder sets auth_enabled if the rbd_user is @@ -75,30 +68,6 @@ class LibvirtNetVolumeDriver(libvirt_volume.LibvirtBaseVolumeDriver): # secret_type is always hard-coded to 'ceph' in cinder conf.auth_secret_type = netdisk_properties['secret_type'] - def _use_rbd_volume_local_attach(self, connection_info): - return (connection_info['driver_volume_type'] == 'rbd' and - CONF.workarounds.rbd_volume_local_attach) - - def connect_volume(self, connection_info, instance): - if self._use_rbd_volume_local_attach(connection_info): - LOG.debug("Calling os-brick to attach RBD Volume as block device", - instance=instance) - device_info = self.connector.connect_volume( - connection_info['data']) - LOG.debug("Attached RBD volume %s", device_info, instance=instance) - connection_info['data']['device_path'] = device_info['path'] - - def disconnect_volume(self, connection_info, instance): - if self._use_rbd_volume_local_attach(connection_info): - LOG.debug("calling os-brick to detach RBD Volume", - instance=instance) - try: - self.connector.disconnect_volume(connection_info['data'], None) - except os_brick_exception.VolumeDeviceNotFound as exc: - LOG.warning('Ignoring VolumeDeviceNotFound: %s', exc) - return - LOG.debug("Disconnected RBD Volume", instance=instance) - def _get_block_config(self, conf, connection_info): conf.source_type = "block" conf.source_path = connection_info['data']['device_path'] @@ -118,15 +87,12 @@ class LibvirtNetVolumeDriver(libvirt_volume.LibvirtBaseVolumeDriver): def get_config(self, connection_info, disk_info): """Returns xml for libvirt.""" - conf = super(LibvirtNetVolumeDriver, - self).get_config(connection_info, disk_info) - if self._use_rbd_volume_local_attach(connection_info): - return self._get_block_config(conf, connection_info) + conf = super( + LibvirtNetVolumeDriver, self).get_config( + connection_info, disk_info) return self._get_net_config(conf, connection_info) def extend_volume(self, connection_info, instance, requested_size): - if self._use_rbd_volume_local_attach(connection_info): - raise NotImplementedError # There is nothing to do for network volumes. Cinder already # extended the volume and there is no local block device which # needs to be refreshed. diff --git a/releasenotes/notes/libvirt-workarounds-remove-rbd_volume_local_attach-ebdf9cf313344a45.yaml b/releasenotes/notes/libvirt-workarounds-remove-rbd_volume_local_attach-ebdf9cf313344a45.yaml new file mode 100644 index 000000000000..1aabb2376495 --- /dev/null +++ b/releasenotes/notes/libvirt-workarounds-remove-rbd_volume_local_attach-ebdf9cf313344a45.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + The ``[workarounds]rbd_volume_local_attach`` workaround configurable has + been removed after previously being deprecated in the Wallaby (23.0.0) + release.