$ 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
This seems to be broken in the Cinder API server.
$ cinder list --sort_key name b969-4ee7- a4ca-e27e33686e 3c)
ERROR: Internal Server Error (HTTP 500) (Request-ID: req-3e740eed-
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 api.middleware. fault [-] Caught error: SQL expression object or string expected. api.middleware. fault Traceback (most recent call last): api.middleware. fault File "/opt/stack/ cinder/ cinder/ api/middleware/ fault.py" , line 76, in __call__ api.middleware. fault return req.get_ response( self.applicatio n) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/request. py", line 1320, in send api.middleware. fault application, catch_exc_ info=False) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/request. py", line 1284, in call_application api.middleware. fault app_iter = application( self.environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 144, in __call__ api.middleware. fault return resp(environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 130, in __call__ api.middleware. fault resp = self.call_func(req, *args, **self.kwargs) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 195, in call_func api.middleware. fault return self.func(req, *args, **kwargs) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ osprofiler/ web.py" , line 99, in __call__ api.middleware. fault return request. get_response( self.applicatio n) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/request. py", line 1320, in send api.middleware. fault application, catch_exc_ info=False) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/request. py", line 1284, in call_application api.middleware. fault app_iter = application( self.environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ keystonemiddlew are/auth_ token.py" , line 977, in __call__ api.middleware. fault return self._call_app(env, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ keystonemiddlew are/auth_ token.py" , line 902, in _call_app api.middleware. fault return self._app(env, _fake_start_ response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 144, in __call__ api.middleware. fault return resp(environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 144, in __call__ api.middleware. fault return resp(environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ routes/ middleware. py", line 131, in __call__ api.middleware. fault response = self.app(environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 144, in __call__ api.middleware. fault return resp(environ, start_response) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 130, in __call__ api.middleware. fault resp = self.call_func(req, *args, **self.kwargs) api.middleware. fault File "/usr/lib/ python2. 7/site- packages/ webob/dec. py", line 195, in call_func api.middleware. fault return self.func(req, *args, **kwargs) api.middleware. fault File "/opt/stack/ cinder/ cinder/ api/openstack/ wsgi.py" , line 978, in __call__ api.middleware. fault content_type, body, accept) api.middleware. fault File "/opt/stack/ cinder/ cinder/ api/openstack/ wsgi.py" , line 1026, in _process_stack api.middleware. fault action_result = self.dispatch(meth, request, action_args) api.middleware. fault File "/opt/stack/ cinder/ cinder/ api/openstack/ wsgi.py" , line 1106, in dispatch api.middleware. fault return method(req=request, **action_args) api.middleware. fault File "/opt/stack/ cinder/ cinder/ api/v2/ volumes. py", line 211, in detail api.middleware. fault return self._get_ volumes( req, is_detail=True) api.middleware. fault File "/opt/stack/ cinder/ cinder/ api/v2/ volumes. py", line 244, in _get_volumes api.middleware. fault viewable_ admin_meta= True) api.middleware. fault File "/opt/stack/ cinder/ cinder/ volume/ api.py" , line 438, in get_all api.middleware. fault filters=filters) api.middleware. fault File "/opt/stack/ cinder/ cinder/ db/api. py", line 227, in volume_ get_all_ by_project api.middleware. fault filters=filters) api.middleware. fault File "/opt/stack/ cinder/ cinder/ db/sqlalchemy/ api.py" , line 182, in wrapper api.middleware. fault return f(*args, **kwargs) api.middleware. fault File "/opt/stack/ cinder/ cinder/ db/sqlalchemy/ api.py" , line 1436, in volume_ get_all_ by_project api.middleware. fault sort_keys, sort_dirs, filters) api.middleware. fault File "/opt/stack/ cinder/ cinder/ db/sqlalchemy/ api.py" , line 1482, in _generate_ paginate_ query api.middleware. fault sort_dirs= sort_dirs) api.middleware. fault File "/opt/stack/ cinder/ cinder/ common/ sqlalchemyutils .py", line 92, in paginate_query api.middleware. fault query = query.order_ by(sort_ dir_func( sort_key_ attr)) api.middleware. fault File "<string>", line 2, in desc api.middleware. fault File "/usr/lib64/ python2. 7/site- packages/ sqlalchemy/ sql/elements. py", line 2415, in _create_desc api.middleware. fault _literal_ as_text( column) , modifier= operators. desc_op) api.middleware. fault File "/usr/lib64/ python2. 7/site- packages/ sqlalchemy/ sql/elements. py", line 3438, in _literal_as_text api.middleware. fault "SQL expression object or string expected." api.middleware. fault ArgumentError: SQL expression object or string expected. api.middleware. fault
2015-03-26 11:17:40.588 ERROR cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.
2015-03-26 11:17:40.588 TRACE cinder.