[Kimchi-devel] [PATCH] [Kimchi] Send (de)attach fail messages to tasks

Paulo Ricardo Paz Vital pvital at linux.vnet.ibm.com
Mon Jul 25 14:58:13 UTC 2016


Reviewed-by: Paulo Ricardo Paz Vital <pvital at linux.vnet.ibm.com>

On Jul 22 05:15PM, Jose Ricardo Ziviani wrote:
>  - Today Kimchi is throwing exceptions when something wrong happens to
>    device attachment/detachment but it also needs to notify the
>    front-end by task callbacks, this commit implements it.
> ---
> Depends on [PATCH v2] [Kimchi] Handle libvirt events for device
> attachment/detachment
> 
> 
>  i18n.py             |  1 +
>  model/vmhostdevs.py | 40 +++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 40 insertions(+), 1 deletion(-)
> 
> diff --git a/i18n.py b/i18n.py
> index 08a3ac8..673390e 100644
> --- a/i18n.py
> +++ b/i18n.py
> @@ -141,6 +141,7 @@ messages = {
>      "KCHVMHDEV0004E": _('"name" should be a device name string'),
>      "KCHVMHDEV0005E": _('The device %(name)s is probably in use by the host. Unable to attach it to the guest.'),
>      "KCHVMHDEV0006E": _('Hot-(un)plug of device %(name)s is not supported.'),
> +    "KCHVMHDEV0007E": _('Failed to attach %(device)s to %(vm)s'),
> 
>      "KCHVMIF0001E": _("Interface %(iface)s does not exist in virtual machine %(name)s"),
>      "KCHVMIF0002E": _("Network %(network)s specified for virtual machine %(name)s does not exist"),
> diff --git a/model/vmhostdevs.py b/model/vmhostdevs.py
> index 5a63bb1..70f0b17 100644
> --- a/model/vmhostdevs.py
> +++ b/model/vmhostdevs.py
> @@ -28,6 +28,7 @@ from operator import itemgetter
> 
>  from wok.exception import InvalidOperation, InvalidParameter, NotFoundError
>  from wok.exception import OperationFailed
> +from wok.message import WokMessage
>  from wok.model.tasks import TaskModel
>  from wok.rollbackcontext import RollbackContext
>  from wok.utils import add_task, run_command, wok_log
> @@ -215,7 +216,12 @@ class VMHostDevsModel(object):
>          lock = params['lock']
> 
>          with lock:
> -            self._validate_pci_passthrough_env()
> +            try:
> +                self._validate_pci_passthrough_env()
> +
> +            except InvalidOperation as e:
> +                cb(e.message, False)
> +                raise
> 
>              dom = VMModel.get_vm(vmid, self.conn)
>              # Due to libvirt limitation, we don't support live assigne device
> @@ -246,6 +252,8 @@ class VMHostDevsModel(object):
>              # does not allow hot-plug of 3D graphic cards
>              is_3D_device = dev_model.is_device_3D_controller(dev_info)
>              if is_3D_device and DOM_STATE_MAP[dom.info()[0]] != "shutoff":
> +                msg = WokMessage('KCHVMHDEV0006E', {'name': dev_info['name']})
> +                cb(msg.get_text(), False)
>                  raise InvalidOperation('KCHVMHDEV0006E',
>                                         {'name': dev_info['name']})
> 
> @@ -258,6 +266,9 @@ class VMHostDevsModel(object):
>                              pci_info['name'])
>                          dev.dettach()
>                      except Exception:
> +                        msg = WokMessage('KCHVMHDEV0005E',
> +                                         {'name': pci_info['name']})
> +                        cb(msg.get_text(), False)
>                          raise OperationFailed('KCHVMHDEV0005E',
>                                                {'name': pci_info['name']})
>                      else:
> @@ -291,6 +302,10 @@ class VMHostDevsModel(object):
>                          dom.attachDeviceFlags(xmlstr, device_flags)
> 
>                      except libvirt.libvirtError:
> +                        msg = WokMessage('KCHVMHDEV0007E',
> +                                         {'device': pci_info['name'],
> +                                          'vm': vmid})
> +                        cb(msg.get_text(), False)
>                          wok_log.error(
>                              'Failed to attach mutifunction device VM %s: \n%s',
>                              vmid, xmlstr)
> @@ -310,13 +325,20 @@ class VMHostDevsModel(object):
>                                                        is_multifunction)
>                      try:
>                          dom.attachDeviceFlags(xmlstr, device_flags)
> +
>                      except libvirt.libvirtError:
> +                        msg = WokMessage('KCHVMHDEV0007E',
> +                                         {'device': pci_info['name'],
> +                                          'vm': vmid})
> +                        cb(msg.get_text(), False)
>                          wok_log.error(
>                              'Failed to attach host device %s to VM %s: \n%s',
>                              pci_info['name'], vmid, xmlstr)
>                          raise
> +
>                      rollback.prependDefer(dom.detachDeviceFlags,
>                                            xmlstr, device_flags)
> +
>                  rollback.commitAll()
> 
>          if DOM_STATE_MAP[dom.info()[0]] == "shutoff":
> @@ -443,11 +465,17 @@ class VMHostDevsModel(object):
>                  try:
>                      cb('Attaching device to VM')
>                      dom.attachDeviceFlags(xmlstr, device_flags)
> +
>                  except libvirt.libvirtError:
> +                    msg = WokMessage('KCHVMHDEV0007E',
> +                                     {'device': dev_info['name'],
> +                                      'vm': vmid})
> +                    cb(msg.get_text(), False)
>                      wok_log.error(
>                          'Failed to attach host device %s to VM %s: \n%s',
>                          dev_info['name'], vmid, xmlstr)
>                      raise
> +
>                  rollback.prependDefer(dom.detachDeviceFlags, xmlstr,
>                                        device_flags)
>                  rollback.commitAll()
> @@ -481,11 +509,17 @@ class VMHostDevsModel(object):
>                  try:
>                      cb('Attaching device to VM')
>                      dom.attachDeviceFlags(xmlstr, device_flags)
> +
>                  except libvirt.libvirtError:
> +                    msg = WokMessage('KCHVMHDEV0007E',
> +                                     {'device': dev_info['name'],
> +                                      'vm': vmid})
> +                    cb(msg.get_text(), False)
>                      wok_log.error(
>                          'Failed to attach host device %s to VM %s: \n%s',
>                          dev_info['name'], vmid, xmlstr)
>                      raise
> +
>                  rollback.prependDefer(dom.detachDeviceFlags, xmlstr,
>                                        device_flags)
>                  rollback.commitAll()
> @@ -538,6 +572,7 @@ class VMHostDevModel(object):
> 
>          try:
>              hostdev = root.devices.hostdev
> +
>          except AttributeError:
>              raise NotFoundError('KCHVMHDEV0001E',
>                                  {'vmid': vmid, 'dev_name': dev_name})
> @@ -606,6 +641,9 @@ class VMHostDevModel(object):
>                          devsmodel.update_mmio_guest(vmid, False)
>                      break
>              else:
> +                msg = WokMessage('KCHVMHDEV0001E',
> +                                 {'vmid': vmid, 'dev_name': dev_name})
> +                cb(msg.get_text(), False)
>                  raise NotFoundError('KCHVMHDEV0001E',
>                                      {'vmid': vmid, 'dev_name': dev_name})
> 
> -- 
> 2.7.4
> 
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
> 

-- 
Paulo Ricardo Paz Vital
Linux Technology Center, IBM Systems
http://www.ibm.com/linux/ltc/




More information about the Kimchi-devel mailing list