Internal Server Error with native pagination

Bug #1656716 reported by YAMAMOTO Takashi
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
neutron
Confirmed
Undecided
Unassigned

Bug Description

Internal Server Error with native pagination, when a user specified
some unfortunate sort keys.

eg.
the following request is constructed to make pagination code see a marker with fixed_ip_address=None.

ubu7% neutron floatingip-list --sort-key fixed_ip_address --sort-dir desc|cat
+--------------------------------------+------------------+---------------------+--------------------------------------+
| id | fixed_ip_address | floating_ip_address | port_id |
+--------------------------------------+------------------+---------------------+--------------------------------------+
| 2b3b7d02-3404-4c53-a783-e4c5ed5b5aee | | 172.24.4.2 | |
| 67f732a1-1b02-4c90-9eb2-7318c0e7e5b6 | | 172.24.4.4 | |
| dcc24c05-5697-4273-9ce1-d17b5e9372a4 | | 172.24.4.7 | |
| 29c951e5-5d64-4bbc-bdf9-9774e308d1c3 | 10.0.0.9 | 2000::9 | 3e78c8f5-eb7c-4a0d-a90e-7a804f4dd886 |
| d93b6472-6cf0-4233-9b27-bbb80e253214 | 10.0.0.9 | 172.24.4.8 | 3e78c8f5-eb7c-4a0d-a90e-7a804f4dd886 |
+--------------------------------------+------------------+---------------------+--------------------------------------+
ubu7% curl -g -i -X GET "http://192.168.137.129:9696/v2.0/floatingips.json?limit=1&sort_key=fixed_ip_address&sort_dir=desc&marker=2b3b7d02-3404-4c53-a783-e4c5ed5b5aee" -H "User-Agent: python-neutronclient" -H "Accept: application/json" -H "X-Auth-Token: $TOKEN"
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 150
X-Openstack-Request-Id: req-e889f8c3-2f10-4ae8-b177-9fab54e8f1a9
Date: Thu, 12 Jan 2017 20:01:39 GMT

{"NeutronError": {"message": "Request Failed: internal server error while processing your request.", "type": "HTTPInternalServerError", "detail": ""}}%

2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource Traceback (most recent call last):
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/api/v2/resource.py", line 79, in resource
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource result = method(request=request, **args)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 92, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource setattr(e, '_RETRY_EXCEEDED', True)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource self.force_reraise()
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 88, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return f(*args, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 151, in wrapper
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource ectxt.value = e.inner_exc
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource self.force_reraise()
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return f(*args, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 128, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource traceback.format_exc())
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource self.force_reraise()
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 123, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return f(*dup_args, **dup_kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/api/v2/base.py", line 369, in index
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return self._items(request, True, parent_id)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/api/v2/base.py", line 308, in _items
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource obj_list = obj_getter(request.context, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 163, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return method(*args, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 92, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource setattr(e, '_RETRY_EXCEEDED', True)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource self.force_reraise()
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 88, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return f(*args, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 151, in wrapper
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource ectxt.value = e.inner_exc
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource self.force_reraise()
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return f(*args, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 128, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource traceback.format_exc())
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource self.force_reraise()
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/api.py", line 123, in wrapped
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return f(*dup_args, **dup_kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/l3_db.py", line 1413, in get_floatingips
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource page_reverse=page_reverse)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/common_db_mixin.py", line 238, in _get_collection
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource page_reverse=page_reverse)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/db/common_db_mixin.py", line 228, in _get_collection_query
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource sort_dirs=sort_dirs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/utils.py", line 233, in paginate_query
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource crit_attrs.append((model_attr < marker_values[i]))
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/operators.py", line 282, in __lt__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return self.operate(lt, other)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 175, in operate
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return op(self.comparator, *other, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/operators.py", line 282, in __lt__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return self.operate(lt, other)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/properties.py", line 269, in operate
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return op(self.__clause_element__(), *other, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/operators.py", line 282, in __lt__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return self.operate(lt, other)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 742, in operate
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return op(self.comparator, *other, **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/operators.py", line 282, in __lt__
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return self.operate(lt, other)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "<string>", line 1, in <lambda>
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/type_api.py", line 60, in operate
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource return o[0](self.expr, op, *(other + o[1:]), **kwargs)
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/default_comparator.py", line 53, in _boolean_compare
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource "Only '=', '!=', 'is_()', 'isnot()' operators can "
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource ArgumentError: Only '=', '!=', 'is_()', 'isnot()' operators can be used with None/True/False
2017-01-13 05:01:39.706 TRACE neutron.api.v2.resource

Revision history for this message
YAMAMOTO Takashi (yamamoto) wrote :

bug 1656262 is an instance of this.

James Anziano (janzian)
Changed in neutron:
status: New → Confirmed
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.