Merge "Huawei: Fix the rest query timeout problem"

This commit is contained in:
Jenkins 2016-11-23 15:31:37 +00:00 committed by Gerrit Code Review
commit 70bd2d4561
3 changed files with 27 additions and 27 deletions

View File

@ -52,6 +52,7 @@ Volume = collections.namedtuple('Volume', vol_attrs)
PROVIDER_LOCATION = '11'
HOST = 'ubuntu001@backend001#OpenStack_Pool'
ID = '21ec7341-9256-497b-97d9-ef48edcf0635'
ENCODE_NAME = huawei_utils.encode_name(ID)
ADMIN_METADATA = {'huawei_lun_wwn': '6643e8c1004c5f6723e9f454003'}
TEST_PAIR_ID = "3400a30d844d0004"
REPLICA_DRIVER_DATA = '{"pair_id": "%s", "rmt_lun_id": "1"}' % TEST_PAIR_ID
@ -422,7 +423,7 @@ FAKE_QUERY_ALL_LUN_RESPONSE = {
},
"data": [{
"ID": "1",
"NAME": huawei_utils.encode_name(ID)
"NAME": ENCODE_NAME
}]
}
@ -491,26 +492,17 @@ FAKE_LUN_COUNT_RESPONSE = """
}
"""
# A fake response of snapshot list response
FAKE_SNAPSHOT_LIST_INFO_RESPONSE = """
{
FAKE_SNAPSHOT_LIST_INFO_RESPONSE = {
"error": {
"code": 0,
"description": "0"
},
"data": [{
"ID": 11,
"NAME": "wr_LMKAjS7O_VtsEIREGYw"
},
{
"ID": 12,
"NAME": "SDFAJSDFLKJ"
},
{
"ID": 13,
"NAME": "s1Ew5v36To-hR2txJitX5Q"
}]
"NAME": ENCODE_NAME
}, ]
}
"""
# A fake response of create snapshot response
FAKE_CREATE_SNAPSHOT_INFO_RESPONSE = """
@ -1251,7 +1243,7 @@ MAP_COMMAND_TO_FAKE_RESPONSE['/lun/1/PUT'] = (
MAP_COMMAND_TO_FAKE_RESPONSE['/lun/11/PUT'] = (
FAKE_COMMON_SUCCESS_RESPONSE)
MAP_COMMAND_TO_FAKE_RESPONSE['/lun?range=[0-65535]/GET'] = (
MAP_COMMAND_TO_FAKE_RESPONSE['/lun?filter=NAME::%s/GET' % ENCODE_NAME] = (
json.dumps(FAKE_QUERY_ALL_LUN_RESPONSE))
MAP_COMMAND_TO_FAKE_RESPONSE['/lun/associate?TYPE=11&ASSOCIATEOBJTYPE=256'
@ -1355,8 +1347,8 @@ MAP_COMMAND_TO_FAKE_RESPONSE['/snapshot/stop/PUT'] = (
MAP_COMMAND_TO_FAKE_RESPONSE['/snapshot/11/DELETE'] = (
FAKE_COMMON_SUCCESS_RESPONSE)
MAP_COMMAND_TO_FAKE_RESPONSE['/snapshot?range=[0-32767]/GET'] = (
FAKE_SNAPSHOT_LIST_INFO_RESPONSE)
MAP_COMMAND_TO_FAKE_RESPONSE['/snapshot?filter=NAME::%s/GET' % ENCODE_NAME] = (
json.dumps(FAKE_SNAPSHOT_LIST_INFO_RESPONSE))
# mock QoS info map
MAP_COMMAND_TO_FAKE_RESPONSE['/ioclass/11/GET'] = (

View File

@ -1305,6 +1305,7 @@ class HuaweiBaseDriver(driver.VolumeDriver):
def _check_lun_valid_for_manage(self, lun_info, external_ref):
lun_id = lun_info.get('ID')
lun_name = lun_info.get('NAME')
# Check whether the LUN is already in LUN group.
if lun_info.get('ISADD2LUNGROUP') == 'true':
@ -1402,9 +1403,9 @@ class HuaweiBaseDriver(driver.VolumeDriver):
existing_ref=external_ref, reason=msg)
# Check whether the LUN exists in a LUN mirror.
if self.client.is_lun_in_mirror(lun_id):
if self.client.is_lun_in_mirror(lun_name):
msg = (_("Can't import LUN %s to Cinder. Already exists in "
"a LUN mirror.") % lun_id)
"a LUN mirror.") % lun_name)
raise exception.ManageExistingInvalidReference(
existing_ref=external_ref, reason=msg)

View File

@ -13,7 +13,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import ast
import json
import re
import six
@ -288,7 +287,10 @@ class RestClient(object):
return item['ID']
def get_lun_id_by_name(self, name):
url = "/lun?range=[0-65535]"
if not name:
return
url = "/lun?filter=NAME::%s" % name
result = self.call(url, None, "GET")
self._assert_rest_result(result, _('Get lun id by name error.'))
@ -350,7 +352,10 @@ class RestClient(object):
self._assert_rest_result(result, _('Delete snapshot error.'))
def get_snapshot_id_by_name(self, name):
url = "/snapshot?range=[0-32767]"
if not name:
return
url = "/snapshot?filter=NAME::%s" % name
description = 'The snapshot license file is unavailable.'
result = self.call(url, None, "GET")
if 'error' in result:
@ -2111,16 +2116,18 @@ class RestClient(object):
return result.get('data', [])
def is_lun_in_mirror(self, lun_id):
url = "/lun?range=[0-65535]"
def is_lun_in_mirror(self, name):
if not name:
return False
url = "/lun?filter=NAME::%s" % name
result = self.call(url, None, "GET")
self._assert_rest_result(result, _('Get volume by name error.'))
for item in result.get('data', []):
rss_obj = item.get('HASRSSOBJECT')
if rss_obj:
rss_obj = ast.literal_eval(rss_obj)
if (item.get('ID') == lun_id and
rss_obj.get('LUNMirror') == 'TRUE'):
rss_obj = json.loads(rss_obj)
if rss_obj.get('LUNMirror') == 'TRUE':
return True
return False