Public bug reported:

Description
===========

When no more pci slot are available for hot pluggable network interface,
nova api return HTTP 500 internal error which is not very helpfull from
client point of view.

It seems that nova catch all libvirt error and raise: 
nova.exception.InterfaceAttachFailed: Failed to attach network adapter device 
to 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53

Should it be better to handle "libvirt.libvirtError: internal error: No more 
available PCI slots"   As a exc.HTTPConflict()  instead of 
webob.exc.HTTPInternalServerError()  for example?
https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/attach_interfaces.py#L182

Steps to reproduce
==================

On a fresh devstack master install

1) spawn one instance

2) create 30 network interfaces
for i in $(seq 2 30) ; do openstack port create --network private port-${i} ; 
done

3) Attach interface to isntances:
for i in $(seq 2 30) ; do openstack server add port 
0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53 port-${i} ; done
last attach ones should failed we the folling out put:

openstack server add port 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53 port-26
Failed to attach network adapter device to 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53 
(HTTP 500) (Request-ID: req-03476f4a-97ac-483d-bf15-e9f0bda776d4)

in Logs:

Jun 03 09:02:06 alex-devstack nova-compute[28931]: ERROR 
nova.virt.libvirt.driver [instance: 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53]   
File "/usr/local/lib/python3.6/dist-packages/libvirt.py", line 593, in 
attachDeviceFlags
Jun 03 09:02:06 alex-devstack nova-compute[28931]: ERROR 
nova.virt.libvirt.driver [instance: 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53]     
if ret == -1: raise libvirtError ('virDomainAttachDeviceFlags() failed', 
dom=self)
Jun 03 09:02:06 alex-devstack nova-compute[28931]: ERROR 
nova.virt.libvirt.driver [instance: 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53] 
libvirt.libvirtError: internal error: No more available PCI slots
...
Jun 03 09:02:22 alex-devstack nova-compute[28931]: ERROR 
oslo_messaging.rpc.server   File "/opt/stack/nova/nova/compute/manager.py", 
line 7574, in attach_interface
Jun 03 09:02:22 alex-devstack nova-compute[28931]: ERROR 
oslo_messaging.rpc.server     instance_uuid=instance.uuid)
Jun 03 09:02:22 alex-devstack nova-compute[28931]: ERROR 
oslo_messaging.rpc.server nova.exception.InterfaceAttachFailed: Failed to 
attach network adapter device to 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53

Expected result
===============
Getting HTTP conflict  or other explicit response indicating that we reach a 
limit.

Actual result
=============
Getting HTTP 500 internal error.

** Affects: nova
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1881881

Title:
  nova api return HTTP 500 error when interface attach failed due to
  lack of instance PCI slots

Status in OpenStack Compute (nova):
  New

Bug description:
  Description
  ===========

  When no more pci slot are available for hot pluggable network
  interface, nova api return HTTP 500 internal error which is not very
  helpfull from client point of view.

  It seems that nova catch all libvirt error and raise: 
  nova.exception.InterfaceAttachFailed: Failed to attach network adapter device 
to 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53

  Should it be better to handle "libvirt.libvirtError: internal error: No more 
available PCI slots"   As a exc.HTTPConflict()  instead of 
webob.exc.HTTPInternalServerError()  for example?
  
https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/attach_interfaces.py#L182

  Steps to reproduce
  ==================

  On a fresh devstack master install

  1) spawn one instance

  2) create 30 network interfaces
  for i in $(seq 2 30) ; do openstack port create --network private port-${i} ; 
done

  3) Attach interface to isntances:
  for i in $(seq 2 30) ; do openstack server add port 
0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53 port-${i} ; done
  last attach ones should failed we the folling out put:

  openstack server add port 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53 port-26
  Failed to attach network adapter device to 
0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53 (HTTP 500) (Request-ID: 
req-03476f4a-97ac-483d-bf15-e9f0bda776d4)

  in Logs:

  Jun 03 09:02:06 alex-devstack nova-compute[28931]: ERROR 
nova.virt.libvirt.driver [instance: 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53]   
File "/usr/local/lib/python3.6/dist-packages/libvirt.py", line 593, in 
attachDeviceFlags
  Jun 03 09:02:06 alex-devstack nova-compute[28931]: ERROR 
nova.virt.libvirt.driver [instance: 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53]     
if ret == -1: raise libvirtError ('virDomainAttachDeviceFlags() failed', 
dom=self)
  Jun 03 09:02:06 alex-devstack nova-compute[28931]: ERROR 
nova.virt.libvirt.driver [instance: 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53] 
libvirt.libvirtError: internal error: No more available PCI slots
  ...
  Jun 03 09:02:22 alex-devstack nova-compute[28931]: ERROR 
oslo_messaging.rpc.server   File "/opt/stack/nova/nova/compute/manager.py", 
line 7574, in attach_interface
  Jun 03 09:02:22 alex-devstack nova-compute[28931]: ERROR 
oslo_messaging.rpc.server     instance_uuid=instance.uuid)
  Jun 03 09:02:22 alex-devstack nova-compute[28931]: ERROR 
oslo_messaging.rpc.server nova.exception.InterfaceAttachFailed: Failed to 
attach network adapter device to 0c6d2b7a-07d8-4f64-baa8-a6c05fb6ce53

  Expected result
  ===============
  Getting HTTP conflict  or other explicit response indicating that we reach a 
limit.

  Actual result
  =============
  Getting HTTP 500 internal error.

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1881881/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to