DongZhi 76625bad6a copy_image_to_volume failed for modify_volume from fusioncompute
Change-Id: I7b4ea1440b3f7b9c64b3d1563bb71ad0c4b1f859
2016-12-07 15:46:18 +00:00

131 lines
4.4 KiB
Python

# Copyright 2016 Huawei Technologies Co.,LTD.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
[VRM DRIVER] VRM CLIENT.
"""
from oslo_config import cfg
from oslo_log import log as logging
from cinder.i18n import _
from cinder.volume.drivers.huawei.fusioncompute.base_proxy import BaseProxy
from cinder.volume.drivers.huawei.fusioncompute import exception as driver_exception
from cinder.volume.drivers.huawei.fusioncompute.utils import Delete_Snapshot_Code
try:
from eventlet import sleep
except ImportError:
from time import sleep
TASK_WAITING = 'waiting'
TASK_RUNNING = 'running'
TASK_SUCCESS = 'success'
TASK_FAILED = 'failed'
TASK_CANCELLING = 'cancelling'
TASK_UNKNOWN = 'unknown'
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
class TaskProxy(BaseProxy):
'''TaskProxy
TaskProxy
'''
def __init__(self):
super(TaskProxy, self).__init__()
def wait_task(self, isShortQuery=0, **kwargs):
'''wait_task
:param kwargs:
:return:
'''
LOG.info(_("[VRM-CINDER] start wait_task()"))
task_uri = kwargs.get('task_uri')
method = 'GET'
if task_uri is None:
LOG.info(_("[VRM-CINDER] task_uri is none."))
raise driver_exception.ClientException(101)
else:
new_url = self._generate_url(task_uri)
retry = 0
error_num = 0
while retry < int(CONF.vrm_timeout):
if isShortQuery == 0:
if retry > 10:
retry += 10
sleep(10)
else:
retry += 3
sleep(3)
else:
if retry > 10:
retry += 10
sleep(10)
else:
retry += 1
sleep(1)
try:
resp, body = self.vrmhttpclient.request(new_url, method)
except Exception as ex:
LOG.info(_("[VRM-CINDER] querytask request exception."))
error_num += 1
if 30 < error_num:
LOG.info(
_("[VRM-CINDER] querytask request exception."))
raise ex
else:
continue
if body:
status = body.get('status')
if status in [TASK_WAITING, TASK_RUNNING]:
continue
elif status in [TASK_SUCCESS]:
LOG.info(
_("[VRM-CINDER] return TASK_SUCCESS wait_task()"))
return status
elif status in [TASK_FAILED, TASK_CANCELLING]:
LOG.info(
_("[VRM-CINDER] return TASK_FAILED wait_task()"))
if body.get('reason') in Delete_Snapshot_Code:
raise driver_exception.ClientException(
code=101,
message=body.get('reasonDes'),
errorCode=body.get('reason'))
raise driver_exception.ClientException(101)
else:
LOG.info(_("[VRM-CINDER] pass wait_task()"))
error_num += 1
if 30 < error_num:
raise driver_exception.ClientException(101)
else:
continue
else:
LOG.info(_("[VRM-CINDER] body is none."))
error_num += 1
if 30 < error_num:
raise driver_exception.ClientException(101)
else:
continue