Windows connectors: add device_scan_interval arg
The Hyper-V Nova driver will pass os-brick the device rescan interval. This change indends to honor this for the Windows connectors. Other connectors use either a fixed rescan interval, either a exponentially growing interval. If needed, this patch can be updated so that other connectors may use this argument as well. Change-Id: I3d6b4ed2ac27269241420ca03ec7075a977e86e8
This commit is contained in:
parent
58956d7c86
commit
b5574ae746
|
@ -29,9 +29,14 @@ class BaseWindowsConnector(initiator_connector.InitiatorConnector):
|
|||
platform = initiator.PLATFORM_ALL
|
||||
os_type = initiator.OS_TYPE_WINDOWS
|
||||
|
||||
DEFAULT_DEVICE_SCAN_INTERVAL = 2
|
||||
|
||||
def __init__(self, root_helper=None, *args, **kwargs):
|
||||
super(BaseWindowsConnector, self).__init__(root_helper,
|
||||
*args, **kwargs)
|
||||
self.device_scan_interval = kwargs.pop(
|
||||
'device_scan_interval', self.DEFAULT_DEVICE_SCAN_INTERVAL)
|
||||
|
||||
self._diskutils = utilsfactory.get_diskutils()
|
||||
|
||||
@staticmethod
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
# under the License.
|
||||
|
||||
import collections
|
||||
import time
|
||||
|
||||
from os_win import utilsfactory
|
||||
from oslo_log import log as logging
|
||||
|
@ -95,6 +96,8 @@ class WindowsFCConnector(win_conn_base.BaseWindowsConnector):
|
|||
if disk_paths:
|
||||
break
|
||||
|
||||
time.sleep(self.device_scan_interval)
|
||||
|
||||
self._check_device_paths(disk_paths)
|
||||
return list(disk_paths)
|
||||
|
||||
|
|
|
@ -101,7 +101,12 @@ class WindowsISCSIConnector(win_conn_base.BaseWindowsConnector,
|
|||
auth_password=connection_properties.get('auth_password'),
|
||||
mpio_enabled=self.use_multipath,
|
||||
initiator_name=initiator_name,
|
||||
rescan_attempts=self.device_scan_attempts)
|
||||
ensure_lun_available=False)
|
||||
self._iscsi_utils.ensure_lun_available(
|
||||
target_iqn=target_iqn,
|
||||
target_lun=target_lun,
|
||||
rescan_attempts=self.device_scan_attempts,
|
||||
retry_interval=self.device_scan_interval)
|
||||
|
||||
if not volume_connected:
|
||||
(device_number,
|
||||
|
|
|
@ -25,7 +25,8 @@ from os_brick.tests.windows import test_base
|
|||
class WindowsFCConnectorTestCase(test_base.WindowsConnectorTestBase):
|
||||
def setUp(self):
|
||||
super(WindowsFCConnectorTestCase, self).setUp()
|
||||
self._connector = fc.WindowsFCConnector()
|
||||
self._connector = fc.WindowsFCConnector(
|
||||
device_scan_interval=mock.sentinel.rescan_interval)
|
||||
|
||||
self._diskutils = self._connector._diskutils
|
||||
self._fc_utils = self._connector._fc_utils
|
||||
|
@ -92,10 +93,12 @@ class WindowsFCConnectorTestCase(test_base.WindowsConnectorTestBase):
|
|||
dict(device_name=mock.sentinel.disk_path)],
|
||||
'expected_paths': [mock.sentinel.disk_path]})
|
||||
@ddt.unpack
|
||||
@mock.patch('time.sleep')
|
||||
@mock.patch.object(fc.WindowsFCConnector, '_get_fc_volume_mappings')
|
||||
@mock.patch.object(fc.WindowsFCConnector, '_check_device_paths')
|
||||
def test_get_volume_paths(self, mock_check_device_paths,
|
||||
mock_get_fc_mappings,
|
||||
mock_sleep,
|
||||
volume_mappings, expected_paths):
|
||||
mock_get_fc_mappings.return_value = volume_mappings
|
||||
|
||||
|
@ -113,6 +116,9 @@ class WindowsFCConnectorTestCase(test_base.WindowsConnectorTestBase):
|
|||
[mock.call(mock.sentinel.conn_props)] * expected_try_count)
|
||||
mock_check_device_paths.assert_called_once_with(
|
||||
set(vol_paths))
|
||||
mock_sleep.assert_has_calls(
|
||||
[mock.call(mock.sentinel.rescan_interval)] *
|
||||
(expected_try_count - 1))
|
||||
|
||||
@mock.patch.object(fc.WindowsFCConnector, '_get_fc_hba_mappings')
|
||||
def test_get_fc_volume_mappings(self, mock_get_fc_hba_mappings):
|
||||
|
|
|
@ -31,7 +31,8 @@ class WindowsISCSIConnectorTestCase(test_base.WindowsConnectorTestBase):
|
|||
self._diskutils = mock.Mock()
|
||||
self._iscsi_utils = mock.Mock()
|
||||
|
||||
self._connector = iscsi.WindowsISCSIConnector()
|
||||
self._connector = iscsi.WindowsISCSIConnector(
|
||||
device_scan_interval=mock.sentinel.rescan_interval)
|
||||
self._connector._diskutils = self._diskutils
|
||||
self._connector._iscsi_utils = self._iscsi_utils
|
||||
|
||||
|
@ -128,9 +129,15 @@ class WindowsISCSIConnectorTestCase(test_base.WindowsConnectorTestBase):
|
|||
auth_password=mock.sentinel.auth_password,
|
||||
mpio_enabled=use_multipath,
|
||||
initiator_name=mock.sentinel.initiator_name,
|
||||
rescan_attempts=(
|
||||
self._connector.device_scan_attempts))] *
|
||||
ensure_lun_available=False)] *
|
||||
expected_login_attempts)
|
||||
self._iscsi_utils.ensure_lun_available.assert_has_calls(
|
||||
[mock.call(target_iqn=mock.sentinel.target_iqn,
|
||||
target_lun=mock.sentinel.target_lun,
|
||||
rescan_attempts=(
|
||||
self._connector.device_scan_attempts),
|
||||
retry_interval=mock.sentinel.rescan_interval)] *
|
||||
(expected_login_attempts - 1))
|
||||
|
||||
self._iscsi_utils.get_device_number_and_path.assert_called_once_with(
|
||||
mock.sentinel.target_iqn, mock.sentinel.target_lun)
|
||||
|
|
Loading…
Reference in New Issue