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
(cherry picked from commit d4ae67db31
)
This commit is contained in:
parent
f9519cca05
commit
cec8d5e982
|
@ -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
|
||||
|
@ -374,7 +375,7 @@ FAKE_QUERY_ALL_LUN_RESPONSE = {
|
|||
},
|
||||
"data": [{
|
||||
"ID": "1",
|
||||
"NAME": huawei_utils.encode_name(ID)
|
||||
"NAME": ENCODE_NAME
|
||||
}]
|
||||
}
|
||||
|
||||
|
@ -443,26 +444,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 = """
|
||||
|
@ -1203,7 +1195,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'
|
||||
|
@ -1307,8 +1299,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'] = (
|
||||
|
|
|
@ -1219,6 +1219,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':
|
||||
|
@ -1312,9 +1313,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:
|
||||
|
@ -2119,16 +2124,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…
Reference in New Issue