From e8380b96a0893229629a6b790b3785c5a31e1f0c Mon Sep 17 00:00:00 2001 From: Lior Friedman Date: Sun, 9 Jan 2022 09:06:28 -0500 Subject: [PATCH] Support use_multipath for NVME driver Initiate connector for LibvirtNVMEVolumeDriver driver with use_multipath argument. Change-Id: I20f6aa2d422259601c44d024099cd5760a8e21c6 --- nova/tests/unit/virt/libvirt/volume/test_nvme.py | 16 +++++++++++++++- nova/virt/libvirt/volume/nvme.py | 1 + .../notes/use-multipath-0a0aa2b479e02370.yaml | 7 +++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/use-multipath-0a0aa2b479e02370.yaml diff --git a/nova/tests/unit/virt/libvirt/volume/test_nvme.py b/nova/tests/unit/virt/libvirt/volume/test_nvme.py index 0d1f23d7a2..fcb303b4c3 100644 --- a/nova/tests/unit/virt/libvirt/volume/test_nvme.py +++ b/nova/tests/unit/virt/libvirt/volume/test_nvme.py @@ -29,7 +29,21 @@ class LibvirtNVMEVolumeDriverTestCase(test_volume.LibvirtVolumeBaseTestCase): nvme.LibvirtNVMEVolumeDriver(self.fake_host) mock_factory.assert_called_once_with( - initiator.NVME, 'sudo', + initiator.NVME, 'sudo', use_multipath=False, + device_scan_attempts=3) + + @mock.patch('os.path.exists', return_value=True) + @mock.patch('nova.utils.get_root_helper') + @mock.patch('os_brick.initiator.connector.InitiatorConnector.factory') + def test_libvirt_nvme_driver_multipath(self, mock_factory, mock_helper, + exists): + self.flags(num_nvme_discover_tries=3, volume_use_multipath=True, + group='libvirt') + mock_helper.return_value = 'sudo' + + nvme.LibvirtNVMEVolumeDriver(self.fake_host) + mock_factory.assert_called_once_with( + initiator.NVME, 'sudo', use_multipath=True, device_scan_attempts=3) @mock.patch('os_brick.initiator.connector.InitiatorConnector.factory', diff --git a/nova/virt/libvirt/volume/nvme.py b/nova/virt/libvirt/volume/nvme.py index fefaaf434d..7436552812 100644 --- a/nova/virt/libvirt/volume/nvme.py +++ b/nova/virt/libvirt/volume/nvme.py @@ -33,6 +33,7 @@ class LibvirtNVMEVolumeDriver(libvirt_volume.LibvirtVolumeDriver): self.connector = connector.InitiatorConnector.factory( initiator.NVME, utils.get_root_helper(), + use_multipath=CONF.libvirt.volume_use_multipath, device_scan_attempts=CONF.libvirt.num_nvme_discover_tries) def connect_volume(self, connection_info, instance): diff --git a/releasenotes/notes/use-multipath-0a0aa2b479e02370.yaml b/releasenotes/notes/use-multipath-0a0aa2b479e02370.yaml new file mode 100644 index 0000000000..950afb0c80 --- /dev/null +++ b/releasenotes/notes/use-multipath-0a0aa2b479e02370.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The libvirt driver now allows using Native NVMeoF multipathing + for NVMeoF connector, via the configuration attribute in nova-cpu.conf + ``[libvirt]/volume_use_multipath``, defaulting to False (disabled). +