** Changed in: neutron
       Status: Fix Committed => Fix Released

** Changed in: neutron
    Milestone: None => kilo-1

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1393399

Title:
  Cisco N1KV plugin doesn't process correctly SQLAlchemy exceptions

Status in OpenStack Neutron (virtual network service):
  Fix Released

Bug description:
  Test 
tempest.api.network.test_networks.BulkNetworkOpsTestJSON.test_bulk_create_delete_port
 failed when used N1KV plugin. As I see from neutron log, Cisco plugin 
incorrectly process exceptions in method _get_policy_profile_by_name (file 
  "/opt/stack/neutron/neutron/plugins/cisco/db/n1kv_db_v2.py") it's leads to 
return code 500 by Neutron service.

  Problem reproduced when creating ports and n1kv profile_id not found in 
database. According Neutron API, for this request allowed only next error codes:
  - badRequest (400)
  - unauthorized (401)
  - forbidden (403)
  - itemNotFound (404)
  - macGenerationFailure (503)
  - serviceUnavailable (503)

  
  Test log:
  2014-11-17 03:24:07,926 18176 DEBUG    [tempest.common.rest_client] Request 
(BulkNetworkOpsTestJSON:test_bulk_create_delete_port): 201 POST 
http://10.20.21.2:9696/v2.0/networks 0.406s
      Request - Headers: {'Content-Type': 'application/json', 'Accept': 
'application/json', 'X-Auth-Token': '<omitted>'}
          Body: {"network": {"name": "test-network--197486"}}
      Response - Headers: {'status': '201', 'content-length': '301', 
'connection': 'close', 'date': 'Mon, 17 Nov 2014 03:24:07 GMT', 'content-type': 
'application/json; charset=UTF-8', 'x-openstack-request-id': 
'req-eca84ad6-9ba1-4f22-b668-018201e65660'}
          Body: {"network": {"status": "ACTIVE", "subnets": [], "name": 
"test-network--197486", "router:external": false, "tenant_id": 
"443d9ae88e094a5c9fa9daa36ac4d00f", "admin_state_up": true, "n1kv:profile_id": 
"2b8937d0-069c-461d-aedb-020ad0e2ed99", "shared": false, "id": 
"dc7b7044-d3ac-450d-9f73-d87b931170a1"}}
  2014-11-17 03:24:08,335 18176 DEBUG    [tempest.common.rest_client] Request 
(BulkNetworkOpsTestJSON:test_bulk_create_delete_port): 201 POST 
http://10.20.21.2:9696/v2.0/networks 0.408s
      Request - Headers: {'Content-Type': 'application/json', 'Accept': 
'application/json', 'X-Auth-Token': '<omitted>'}
          Body: {"network": {"name": "test-network--380129587"}}
      Response - Headers: {'status': '201', 'content-length': '304', 
'connection': 'close', 'date': 'Mon, 17 Nov 2014 03:24:08 GMT', 'content-type': 
'application/json; charset=UTF-8', 'x-openstack-request-id': 
'req-0f0ca9f6-82c0-4437-906e-005ae6b31377'}
          Body: {"network": {"status": "ACTIVE", "subnets": [], "name": 
"test-network--380129587", "router:external": false, "tenant_id": 
"443d9ae88e094a5c9fa9daa36ac4d00f", "admin_state_up": true, "n1kv:profile_id": 
"2b8937d0-069c-461d-aedb-020ad0e2ed99", "shared": false, "id": 
"381d122a-f55c-4c39-9eb9-17d5cd3ef818"}}
  2014-11-17 03:24:08,390 18176 DEBUG    [tempest.common.rest_client] Request 
(BulkNetworkOpsTestJSON:test_bulk_create_delete_port): 500 POST 
http://10.20.21.2:9696/v2.0/ports 0.053s
      Request - Headers: {'Content-Type': 'application/json', 'Accept': 
'application/json', 'X-Auth-Token': '<omitted>'}
          Body: {"ports": [{"network_id": 
"dc7b7044-d3ac-450d-9f73-d87b931170a1", "name": "port--769863538", 
"admin_state_up": true}, {"network_id": "381d122a-f55c-4c39-9eb9-17d5cd3ef818", 
"admin_state_up": false}]}
      Response - Headers: {'status': '500', 'content-length': '150', 
'connection': 'close', 'date': 'Mon, 17 Nov 2014 03:24:08 GMT', 'content-type': 
'application/json; charset=UTF-8', 'x-openstack-request-id': 
'req-7bfbe0d3-de6b-4450-b4ee-7ead1af3fa7f'}
          Body: {"NeutronError": {"message": "Request Failed: internal server 
error while processing your request.", "type": "HTTPInternalServerError", 
"detail": ""}}
  }}}

  Traceback (most recent call last):
    File "tempest/api/network/test_networks.py", line 463, in 
test_bulk_create_delete_port
      _, body = self.client.create_bulk_port(port_list)
    File "tempest/services/network/network_client_base.py", line 207, in 
create_bulk_port
      resp, body = self.post(uri, body)
    File "tempest/services/network/network_client_base.py", line 74, in post
      return self.rest_client.post(uri, body, headers)
    File "tempest/common/rest_client.py", line 234, in post
      return self.request('POST', url, extra_headers, headers, body)
    File "tempest/common/rest_client.py", line 454, in request
      resp, resp_body)
    File "tempest/common/rest_client.py", line 550, in _error_checker
      raise exceptions.ServerFault(message)
  ServerFault: Got server fault
  Details: Request Failed: internal server error while processing your request.
  Traceback (most recent call last):
  _StringException: Empty attachments:
    stderr
    stdout


  Neutron log:
  2014-11-17 10:15:03.365 ERROR neutron.db.db_base_plugin_v2 
[req-c8f914ec-00a8-4734-9557-dd14bc00b1d2 BulkNetworkOpsTestJSON-1775368720 
77347f40bf50412eb636412a20c64aaf] An exception occurred while creating the 
port:{'port': {'binding:host_id': <object object at 0x7f0be269c110>, u'name': 
u'port--1581734127', u'admin_state_up': True, u'network_id': 
u'fee9d7af-edec-4d31-aa27-b94f5216ac7e', 'tenant_id': 
u'77347f40bf50412eb636412a20c64aaf', 'binding:vnic_type': 'normal', 
'device_owner': '', 'n1kv:profile_id': <object object at 0x7f0be269c110>, 
'mac_address': <object object at 0x7f0be269c110>, 'binding:profile': <object 
object at 0x7f0be269c110>, 'fixed_ips': <object object at 0x7f0be269c110>, 
'device_id': ''}}
  2014-11-17 10:15:03.366 ERROR neutron.api.v2.resource 
[req-c8f914ec-00a8-4734-9557-dd14bc00b1d2 BulkNetworkOpsTestJSON-1775368720 
77347f40bf50412eb636412a20c64aaf] create failed
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource Traceback (most recent 
call last):
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/api/v2/resource.py", line 81, in resource
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     result = 
method(request=request, **args)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/api/v2/base.py", line 431, in create
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     objs = 
obj_creator(request.context, body, **kwargs)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/db/db_base_plugin_v2.py", line 1310, in 
create_port_bulk
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     return 
self._create_bulk('port', context, ports)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/db/db_base_plugin_v2.py", line 896, in _create_bulk
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     {'resource': 
resource, 'item': item})
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/openstack/common/excutils.py", line 82, in __exit__
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     
six.reraise(self.type_, self.value, self.tb)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/db/db_base_plugin_v2.py", line 889, in _create_bulk
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     
objects.append(obj_creator(context, item))
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/plugins/cisco/models/virt_phy_sw_v2.py", line 235, 
in create_port
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     args)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/plugins/cisco/models/virt_phy_sw_v2.py", line 124, 
in _invoke_plugin_per_device
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     return func(*args, 
**kwargs)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py", line 
1122, in create_port
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     p_profile = 
self._get_policy_profile_by_name(p_profile_name)
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/plugins/cisco/db/n1kv_db_v2.py", line 1603, in 
_get_policy_profile_by_name
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     
filter_by(name=name).one())
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource   File 
"/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2316, in one
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource     raise 
orm_exc.NoResultFound("No row was found for one()")
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource NoResultFound: No row 
was found for one()
  2014-11-17 10:15:03.366 TRACE neutron.api.v2.resource

  Devstack local.conf:

  [[local|localrc]]
  MYSQL_PASSWORD=nova
  RABBIT_PASSWORD=nova
  SERVICE_TOKEN=nova
  SERVICE_PASSWORD=nova
  ADMIN_PASSWORD=nova
  
ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,rabbit
  disable_service horizon
  disable_service n-net, q-agt, q-l3
  enable_service mysql, q-svc, q-dhcp, q-meta, q-lbaas, neutron, tempest
  VOLUME_BACKING_FILE_SIZE=2052M
  Q_PLUGIN=cisco
  declare -a Q_CISCO_PLUGIN_SUBPLUGINS=(n1kv)
  Q_CISCO_PLUGIN_DEVSTACK_VSM=False
  Q_CISCO_PLUGIN_VSM_IP=192.168.1.10
  Q_CISCO_PLUGIN_VSM_USERNAME=admin
  Q_CISCO_PLUGIN_VSM_PASSWORD=Admin12345
  Q_CISCO_PLUGIN_UVEM_DEB_IMAGE=nexus_1000v_vem-12.04-5.2.1.SK1.2.1.29.S0-1.deb
  Q_CISCO_PLUGIN_INTEGRATION_BRIDGE=br-int
  Q_CISCO_PLUGIN_HOST_MGMT_INTF=eth0
  PHYSICAL_NETWORK=test-physnet1
  LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver
  API_RATE_LIMIT=False
  VERBOSE=True
  DEBUG=True

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1393399/+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