예제 #1
0
 def handle_errors(self, response, key, object_type):
     if response.status_code == 400:
         error = response.json()
         err_msg = error.get('message')
         if err_msg.endswith(OBJ_NOT_FOUND_ERR):
             LOG.warning(_LW("object %(key)s of "
                             "type %(typ)s not found, %(err_msg)s"),
                         {'key': key, 'typ': object_type,
                          'err_msg': err_msg, })
             raise exception.NotFound()
         elif err_msg == VOL_NOT_UNIQUE_ERR:
             LOG.error(_LE("can't create 2 volumes with the same name, %s"),
                       err_msg)
             msg = (_('Volume by this name already exists'))
             raise exception.VolumeBackendAPIException(data=msg)
         elif err_msg == VOL_OBJ_NOT_FOUND_ERR:
             LOG.error(_LE("Can't find volume to map %(key)s, %(msg)s"),
                       {'key': key, 'msg': err_msg, })
             raise exception.VolumeNotFound(volume_id=key)
         elif ALREADY_MAPPED_ERR in err_msg:
             raise exception.XtremIOAlreadyMappedError()
         elif err_msg == SYSTEM_BUSY:
             raise exception.XtremIOArrayBusy()
         elif err_msg in (TOO_MANY_OBJECTS, TOO_MANY_SNAPSHOTS_PER_VOL):
             raise exception.XtremIOSnapshotsLimitExceeded()
     msg = _('Bad response from XMS, %s') % response.text
     LOG.error(msg)
     raise exception.VolumeBackendAPIException(message=msg)
예제 #2
0
 def _send_request(self, object_type, key, request):
     try:
         response = urllib2.urlopen(request)
     except (urllib2.HTTPError, ) as exc:
         if exc.code == 400 and hasattr(exc, 'read'):
             error = json.load(exc)
             err_msg = error['message']
             if err_msg.endswith(OBJ_NOT_FOUND_ERR):
                 LOG.warning(
                     _LW("object %(key)s of "
                         "type %(typ)s not found"), {
                             'key': key,
                             'typ': object_type
                         })
                 raise exception.NotFound()
             elif err_msg == VOL_NOT_UNIQUE_ERR:
                 LOG.error(_LE("can't create 2 volumes with the same name"))
                 msg = (_('Volume by this name already exists'))
                 raise exception.VolumeBackendAPIException(data=msg)
             elif err_msg == VOL_OBJ_NOT_FOUND_ERR:
                 LOG.error(_LE("Can't find volume to map %s"), key)
                 raise exception.VolumeNotFound(volume_id=key)
             elif ALREADY_MAPPED_ERR in err_msg:
                 raise exception.XtremIOAlreadyMappedError()
         LOG.error(_LE('Bad response from XMS, %s'), exc.read())
         msg = (_('Exception: %s') % six.text_type(exc))
         raise exception.VolumeDriverException(message=msg)
     if response.code >= 300:
         LOG.error(_LE('bad API response, %s'), response.msg)
         msg = (_('bad response from XMS got http code %(code)d, %(msg)s') %
                {
                    'code': response.code,
                    'msg': response.msg
                })
         raise exception.VolumeBackendAPIException(data=msg)
     return response