Comment 3 for bug 1404020

Revision history for this message
Eric Harney (eharney) wrote :

This seems to be broken in the Cinder API server.

$ cinder list --sort_key name
ERROR: Internal Server Error (HTTP 500) (Request-ID: req-3e740eed-b969-4ee7-a4ca-e27e33686e3c)

paginate_query in cinder/common/sqlalchemyutils.py does:
    sort_key_attr = getattr(model, current_sort_key)

where current_sort_key = 'name'. This returns
    (Pdb) print sort_key_attr
    <property object at 0x42f0730>

since 'name' is a property, whereas other fields return a string that can be used in a query:
    (Pdb) print getattr(model, 'id')
    Volume.id

This generates an invalid sqlalchemy query, which fails as below.

So using 'name' as a sort_key seems to need some additional processing since it is a @property in the sqlalchemy Volume model. The intent may have been for this to map to the display_name field.

2015-03-26 11:17:40.434 DEBUG cinder.volume.api [-] Searching by: MultiDict([('no_migration_targets', True)]). from (pid=20188) get_all /opt/stack/cinder/cinder/volume/api.py:421
2015-03-26 11:17:40.588 ERROR cinder.api.middleware.fault [-] Caught error: SQL expression object or string expected.
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault Traceback (most recent call last):
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/api/middleware/fault.py", line 76, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return req.get_response(self.application)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/request.py", line 1320, in send
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault application, catch_exc_info=False)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/request.py", line 1284, in call_application
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault app_iter = application(self.environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return resp(environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 130, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault resp = self.call_func(req, *args, **self.kwargs)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 195, in call_func
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return self.func(req, *args, **kwargs)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/osprofiler/web.py", line 99, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return request.get_response(self.application)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/request.py", line 1320, in send
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault application, catch_exc_info=False)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/request.py", line 1284, in call_application
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault app_iter = application(self.environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/keystonemiddleware/auth_token.py", line 977, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return self._call_app(env, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/keystonemiddleware/auth_token.py", line 902, in _call_app
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return self._app(env, _fake_start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return resp(environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return resp(environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/routes/middleware.py", line 131, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault response = self.app(environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 144, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return resp(environ, start_response)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 130, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault resp = self.call_func(req, *args, **self.kwargs)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib/python2.7/site-packages/webob/dec.py", line 195, in call_func
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return self.func(req, *args, **kwargs)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/api/openstack/wsgi.py", line 978, in __call__
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault content_type, body, accept)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/api/openstack/wsgi.py", line 1026, in _process_stack
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault action_result = self.dispatch(meth, request, action_args)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/api/openstack/wsgi.py", line 1106, in dispatch
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return method(req=request, **action_args)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/api/v2/volumes.py", line 211, in detail
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return self._get_volumes(req, is_detail=True)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/api/v2/volumes.py", line 244, in _get_volumes
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault viewable_admin_meta=True)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/volume/api.py", line 438, in get_all
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault filters=filters)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/db/api.py", line 227, in volume_get_all_by_project
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault filters=filters)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/db/sqlalchemy/api.py", line 182, in wrapper
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault return f(*args, **kwargs)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/db/sqlalchemy/api.py", line 1436, in volume_get_all_by_project
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault sort_keys, sort_dirs, filters)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/db/sqlalchemy/api.py", line 1482, in _generate_paginate_query
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault sort_dirs=sort_dirs)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/opt/stack/cinder/cinder/common/sqlalchemyutils.py", line 92, in paginate_query
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault query = query.order_by(sort_dir_func(sort_key_attr))
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "<string>", line 2, in desc
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib64/python2.7/site-packages/sqlalchemy/sql/elements.py", line 2415, in _create_desc
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault _literal_as_text(column), modifier=operators.desc_op)
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault File "/usr/lib64/python2.7/site-packages/sqlalchemy/sql/elements.py", line 3438, in _literal_as_text
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault "SQL expression object or string expected."
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault ArgumentError: SQL expression object or string expected.
2015-03-26 11:17:40.588 TRACE cinder.api.middleware.fault