OS API: empty network list raises an exception

Bug #1023805 reported by Alexej Ababilov
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Fix Released
Undecided
Alexej Ababilov

Bug Description

Consider if network list is empty and `list all networks' call is performed with OS API.
nova-api performs an RPC call. Then NoNetworksFound will be raised in nova-network. nova-api will raise RemoteError. Finally, a computeFault will be reported to the end user.

Example.
curl -i 'main-node:8774/v1.1/45d2e66674b647c2bee1d1f18ae64e93/os-networks' -H 'x-auth-token: f796ca9341b54bf897c91aa65fe4374a'
HTTP/1.1 500 Internal Server Error
Content-Length: 128
Content-Type: application/json; charset=UTF-8
X-Compute-Request-Id: req-a45fc407-feda-4f69-b27c-ce042892f28b
Date: Thu, 12 Jul 2012 08:59:09 GMT

{"computeFault": {"message": "The server has either erred or is incapable of performing the requested operation.", "code": 500}}

nova-network log:

2012-07-12 11:59:09 TRACE nova.rpc.amqp Traceback (most recent call last):
2012-07-12 11:59:09 TRACE nova.rpc.amqp File "/usr/lib/python2.6/site-packages/nova/rpc/amqp.py", line 253, in _process_data
2012-07-12 11:59:09 TRACE nova.rpc.amqp rval = node_func(context=ctxt, **node_args)
2012-07-12 11:59:09 TRACE nova.rpc.amqp File "/usr/lib/python2.6/site-packages/nova/network/manager.py", line 257, in wrapped
2012-07-12 11:59:09 TRACE nova.rpc.amqp return func(self, context, *args, **kwargs)
2012-07-12 11:59:09 TRACE nova.rpc.amqp File "/usr/lib/python2.6/site-packages/nova/network/manager.py", line 1567, in get_all_networks
2012-07-12 11:59:09 TRACE nova.rpc.amqp networks = self.db.network_get_all(context)
2012-07-12 11:59:09 TRACE nova.rpc.amqp File "/usr/lib/python2.6/site-packages/nova/db/api.py", line 760, in network_get_all
2012-07-12 11:59:09 TRACE nova.rpc.amqp return IMPL.network_get_all(context)
2012-07-12 11:59:09 TRACE nova.rpc.amqp File "/usr/lib/python2.6/site-packages/nova/db/sqlalchemy/api.py", line 102, in wrapper
2012-07-12 11:59:09 TRACE nova.rpc.amqp return f(*args, **kwargs)
2012-07-12 11:59:09 TRACE nova.rpc.amqp File "/usr/lib/python2.6/site-packages/nova/db/sqlalchemy/api.py", line 1943, in network_get_all
2012-07-12 11:59:09 TRACE nova.rpc.amqp raise exception.NoNetworksFound()
2012-07-12 11:59:09 TRACE nova.rpc.amqp NoNetworksFound: No networks defined.
2012-07-12 11:59:09 TRACE nova.rpc.amqp

nova-api log:

2012-07-12 11:59:09 TRACE nova.api.openstack Traceback (most recent call last):
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py", line 41, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack return req.get_response(self.application)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/request.py", line 1053, in get_response
2012-07-12 11:59:09 TRACE nova.api.openstack application, catch_exc_info=False)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/request.py", line 1022, in call_application
2012-07-12 11:59:09 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/keystone/middleware/auth_token.py", line 176, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack return self.app(env, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack return resp(environ, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack return resp(environ, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack return resp(environ, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/routes/middleware.py", line 131, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack response = self.app(environ, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack return resp(environ, start_response)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/dec.py", line 147, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/webob/dec.py", line 208, in call_func
2012-07-12 11:59:09 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/api/openstack/wsgi.py", line 803, in __call__
2012-07-12 11:59:09 TRACE nova.api.openstack content_type, body, accept)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/api/openstack/wsgi.py", line 851, in _process_stack
2012-07-12 11:59:09 TRACE nova.api.openstack action_result = self.dispatch(meth, request, action_args)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/api/openstack/wsgi.py", line 926, in dispatch
2012-07-12 11:59:09 TRACE nova.api.openstack return method(req=request, **action_args)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/networks.py", line 89, in index
2012-07-12 11:59:09 TRACE nova.api.openstack networks = self.network_api.get_all(context)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/network/api.py", line 39, in get_all
2012-07-12 11:59:09 TRACE nova.api.openstack {'method': 'get_all_networks'})
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/rpc/__init__.py", line 68, in call
2012-07-12 11:59:09 TRACE nova.api.openstack return _get_impl().call(context, topic, msg, timeout)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/rpc/impl_kombu.py", line 674, in call
2012-07-12 11:59:09 TRACE nova.api.openstack return rpc_amqp.call(context, topic, msg, timeout, Connection.pool)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/rpc/amqp.py", line 343, in call
2012-07-12 11:59:09 TRACE nova.api.openstack rv = list(rv)
2012-07-12 11:59:09 TRACE nova.api.openstack File "/usr/lib/python2.6/site-packages/nova/rpc/amqp.py", line 311, in __iter__
2012-07-12 11:59:09 TRACE nova.api.openstack raise result
2012-07-12 11:59:09 TRACE nova.api.openstack RemoteError: Remote error: NoNetworksFound No networks defined.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to nova (master)

Fix proposed to branch: master
Review: https://review.openstack.org/9705

Changed in nova:
assignee: nobody → Alessio Ababilov (aababilov)
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to nova (master)

Reviewed: https://review.openstack.org/9705
Committed: http://github.com/openstack/nova/commit/4d27b6e87bde179a8c4ada5bfc2f4cd7904f7b48
Submitter: Jenkins
Branch: master

commit 4d27b6e87bde179a8c4ada5bfc2f4cd7904f7b48
Author: Alessio Ababilov <email address hidden>
Date: Thu Jul 12 12:31:50 2012 +0300

    network manager returns empty list, not raise an exception

    Fix bug #1023805

    Change-Id: I9ddb10db127375ad37a7760b53e44782b392c2e3

Changed in nova:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in nova:
milestone: none → folsom-3
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in nova:
milestone: folsom-3 → 2012.2
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.