yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #31726
[Bug 1443483] [NEW] 'nova list' does not work when #ports*#instances is big number
Public bug reported:
I have OpenStack Icehouse and I got this error:
[root@fed-cloud09 ~(keystone_admin)]# nova list
ERROR: The server has either erred or is incapable of performing the requested operation. (HTTP 500) (Request-ID: req-3b8fc3e4-310b-482c-ba20-0666502a1bcb)
And in /var/log/nova/nova-api.log there is:
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack Traceback (most recent call last):
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/__init__.py", line 125, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return req.get_response(self.application)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/request.py", line 1296, in send
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack application, catch_exc_info=False)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/request.py", line 1260, in call_application
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/keystoneclient/middleware/auth_token.py", line 679, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return self.app(env, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/routes/middleware.py", line 131, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack response = self.app(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 130, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 195, in call_func
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py", line 917, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack content_type, body, accept)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py", line 1009, in _process_stack
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack request, action_args)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py", line 887, in post_process_extensions
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack **action_args)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/compute/contrib/security_groups.py", line 601, in detail
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack self._extend_servers(req, list(resp_obj.obj['servers']))
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/compute/contrib/security_groups.py", line 550, in _extend_servers
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack servers))
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/network/security_group/neutron_driver.py", line 345, in get_instances_security_groups_bindings
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack ports = self._get_ports_from_server_list(servers, neutron)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/network/security_group/neutron_driver.py", line 304, in _get_ports_from_server_list
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack ports.extend(neutron.list_ports(**search_opts).get('ports'))
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 111, in with_params
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack ret = self.function(instance, *args, **kwargs)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 306, in list_ports
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack **_params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1250, in list
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack for r in self._pagination(collection, path, **params):
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1263, in _pagination
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack res = self.get(path, params=params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1236, in get
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack headers=headers, params=params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1221, in retry_request
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack headers=headers, params=params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1164, in do_request
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack self._handle_fault_response(status_code, replybody)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1134, in _handle_fault_response
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack exception_handler_v20(status_code, des_error_body)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 91, in exception_handler_v20
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack message=message)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack NeutronClientException: <html><body><h1>400 Bad request</h1>
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack Your browser sent an invalid request.
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack </body></html>
After some investigation I find that the problem seems to be in
self._get_ports_from_server_list() which request (when incepted) by GET method.
when I debug do_request() of Client class. I found that the it tries to do:
/v2.0/ports.json?device_id=0980a371-4991-466b-a471-e847c7d605aa&device_id=f9f8c2d8-7665-4ee8-b6e1-5446b61a1e55&device_id=3055cab9-c0a1-454b-88c3-f34ff92fbc1d&device_id=6d6e64b4-b043-4ba4-93b6-92c06aa7f4e9........
Which is likely too long.
Steps to reproduce:
1. Have 11 security groups
2. spin up 200 instances (both numbers are for one tenant)
3. try to do "nova list" on command line
This way the GET request have aprox. 9400 bytes, which exceed usual implementation of 8K.
I assume that correct way would be to send this query via POST.
** 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/1443483
Title:
'nova list' does not work when #ports*#instances is big number
Status in OpenStack Compute (Nova):
New
Bug description:
I have OpenStack Icehouse and I got this error:
[root@fed-cloud09 ~(keystone_admin)]# nova list
ERROR: The server has either erred or is incapable of performing the requested operation. (HTTP 500) (Request-ID: req-3b8fc3e4-310b-482c-ba20-0666502a1bcb)
And in /var/log/nova/nova-api.log there is:
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack Traceback (most recent call last):
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/__init__.py", line 125, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return req.get_response(self.application)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/request.py", line 1296, in send
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack application, catch_exc_info=False)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/request.py", line 1260, in call_application
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/keystoneclient/middleware/auth_token.py", line 679, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return self.app(env, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/routes/middleware.py", line 131, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack response = self.app(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return resp(environ, start_response)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 130, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/webob/dec.py", line 195, in call_func
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py", line 917, in __call__
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack content_type, body, accept)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py", line 1009, in _process_stack
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack request, action_args)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py", line 887, in post_process_extensions
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack **action_args)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/compute/contrib/security_groups.py", line 601, in detail
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack self._extend_servers(req, list(resp_obj.obj['servers']))
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/api/openstack/compute/contrib/security_groups.py", line 550, in _extend_servers
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack servers))
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/network/security_group/neutron_driver.py", line 345, in get_instances_security_groups_bindings
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack ports = self._get_ports_from_server_list(servers, neutron)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/nova/network/security_group/neutron_driver.py", line 304, in _get_ports_from_server_list
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack ports.extend(neutron.list_ports(**search_opts).get('ports'))
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 111, in with_params
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack ret = self.function(instance, *args, **kwargs)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 306, in list_ports
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack **_params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1250, in list
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack for r in self._pagination(collection, path, **params):
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1263, in _pagination
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack res = self.get(path, params=params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1236, in get
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack headers=headers, params=params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1221, in retry_request
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack headers=headers, params=params)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1164, in do_request
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack self._handle_fault_response(status_code, replybody)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 1134, in _handle_fault_response
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack exception_handler_v20(status_code, des_error_body)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack File "/usr/lib/python2.7/site-packages/neutronclient/v2_0/client.py", line 91, in exception_handler_v20
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack message=message)
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack NeutronClientException: <html><body><h1>400 Bad request</h1>
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack Your browser sent an invalid request.
2015-04-13 13:47:22.065 18123 TRACE nova.api.openstack </body></html>
After some investigation I find that the problem seems to be in
self._get_ports_from_server_list() which request (when incepted) by GET method.
when I debug do_request() of Client class. I found that the it tries to do:
/v2.0/ports.json?device_id=0980a371-4991-466b-a471-e847c7d605aa&device_id=f9f8c2d8-7665-4ee8-b6e1-5446b61a1e55&device_id=3055cab9-c0a1-454b-88c3-f34ff92fbc1d&device_id=6d6e64b4-b043-4ba4-93b6-92c06aa7f4e9........
Which is likely too long.
Steps to reproduce:
1. Have 11 security groups
2. spin up 200 instances (both numbers are for one tenant)
3. try to do "nova list" on command line
This way the GET request have aprox. 9400 bytes, which exceed usual implementation of 8K.
I assume that correct way would be to send this query via POST.
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1443483/+subscriptions
Follow ups
References