Huawei: Fix the rest query timeout problem
Due to the amount of query data is too large to cause rest query timeout. This commit fixes that by matching by name when rest query Change-Id: Ied73574658403ed04cb238c953b11d56c9d35ba1 Closes-Bug: #1633956
This commit is contained in:
parent
14899a9a8e
commit
d4ae67db31
@ -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'] = (
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user