Merge "Convert lenovo driver to use distributed lock manager"

This commit is contained in:
Jenkins 2017-08-30 02:39:33 +00:00 committed by Gerrit Code Review
commit fc84a1a2b1
2 changed files with 16 additions and 7 deletions

View File

@ -40,6 +40,11 @@ resp_login = '''<RESPONSE><OBJECT basetype="status" name="status" oid="1">
resp_fw = '''<RESPONSE><PROPERTY name="sc-fw">GLS220R001</PROPERTY>
<PROPERTY name="return-code">0</PROPERTY></RESPONSE>'''
resp_system = '''<RESPONSE>
<PROPERTY name="midplane-serial-number">00C0FFEEEEEE</PROPERTY>
<PROPERTY name="return-code">0</PROPERTY>
</RESPONSE>'''
resp_badlogin = '''<RESPONSE><OBJECT basetype="status" name="status" oid="1">
<PROPERTY name="response-type">error</PROPERTY>
<PROPERTY name="response-type-numeric">1</PROPERTY>
@ -171,7 +176,7 @@ class TestDotHillClient(test.TestCase):
self.assertRaises(exception.DotHillAuthenticationError,
self.client.login)
m.text.encode.side_effect = [resp_login, resp_fw]
m.text.encode.side_effect = [resp_login, resp_fw, resp_system]
self.client.login()
self.assertEqual(session_key, self.client._session_key)

View File

@ -25,9 +25,9 @@ from oslo_utils import units
import requests
import six
from cinder import coordination
from cinder import exception
from cinder.i18n import _
from cinder import utils
LOG = logging.getLogger(__name__)
@ -42,6 +42,8 @@ class DotHillClient(object):
self.ssl_verify = ssl_verify
self._set_host(self._mgmt_ip_addrs[0])
self._fw = ''
self._driver_name = self.__class__.__name__.split('.')[0]
self._array_name = 'unknown'
self._luns_in_use_by_host = {}
def _set_host(self, ip_addr):
@ -75,8 +77,10 @@ class DotHillClient(object):
try:
self._get_session_key()
self.get_firmware_version()
LOG.debug("Logged in to array at %s (session %s)",
self._base_url, self._session_key)
if not self._array_name or self._array_name == 'unknown':
self._array_name = self.get_serial_number()
LOG.debug("Logged in to array %s at %s (session %s)",
self._array_name, self._base_url, self._session_key)
return
except exception.DotHillConnectionError:
not_responding = self._curr_ip_addr
@ -98,7 +102,7 @@ class DotHillClient(object):
raise exception.DotHillConnectionError(
message=_("Failed to log in to management controller"))
@utils.synchronized(__name__, external=True)
@coordination.synchronized('{self._driver_name}-{self._array_name}')
def _get_session_key(self):
"""Retrieve a session key from the array."""
@ -192,7 +196,7 @@ class DotHillClient(object):
tries_left -= 1
self.session_login()
@utils.synchronized(__name__, external=True)
@coordination.synchronized('{self._driver_name}-{self._array_name}')
def _api_request(self, path, *args, **kargs):
"""Performs an HTTP request on the device, with locking.
@ -366,7 +370,7 @@ class DotHillClient(object):
raise exception.DotHillRequestError(
message=_("No LUNs available for mapping to host %s.") % host)
@utils.synchronized(__name__ + '.map_volume', external=True)
@coordination.synchronized('{self._driver_name}-{self._array_name}-map')
def map_volume(self, volume_name, connector, connector_element):
if connector_element == 'wwpns':
lun = self._get_first_available_lun_for_host(connector['wwpns'][0])