quota_class_update with class_id longer than 255 returns 500 error

Bug #1463396 reported by Pranali Deore
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Fix Released
Undecided
Pranali Deore

Bug Description

nova quota_class_update returns 500 error if you pass class parameter with more than 255 characters

steps to reproduce:

$ nova quota_class_update --instances 2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

The server has either erred or is incapable of performing the requested operation. (HTTP 500) (Request-ID: req-3f51a5c8-ccfc-4675-b224-a5cf94f0172d)

n-api error logs:

2015-06-09 05:51:19.383 ERROR nova.api.openstack [req-3f51a5c8-ccfc-4675-b224-a5cf94f0172d admin admin] Caught error: (DataError) (1406, "Data too long for
column 'class_name' at row 1") 'INSERT INTO quota_classes (created_at, updated_at, deleted_at, deleted, class_name, resource, hard_limit) VALUES (%s, %s, %s
, %s, %s, %s, %s)' (datetime.datetime(2015, 6, 9, 12, 51, 19, 380807), None, None, 0, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'instances', 7)
2015-06-09 05:51:19.383 TRACE nova.api.openstack Traceback (most recent call last):
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/__init__.py", line 126, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack return req.get_response(self.application)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1317, in send
2015-06-09 05:51:19.383 TRACE nova.api.openstack application, catch_exc_info=False)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1281, in call_application
2015-06-09 05:51:19.383 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/keystonemiddleware/auth_token/__init__.py", line 639, in __c
all__
2015-06-09 05:51:19.383 TRACE nova.api.openstack return self._call_app(env, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/keystonemiddleware/auth_token/__init__.py", line 559, in _ca
ll_app
2015-06-09 05:51:19.383 TRACE nova.api.openstack return self._app(env, _fake_start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/routes/middleware.py", line 136, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack response = self.app(environ, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2015-06-09 05:51:19.383 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 756, in __call__
2015-06-09 05:51:19.383 TRACE nova.api.openstack content_type, body, accept)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 821, in _process_stack
2015-06-09 05:51:19.383 TRACE nova.api.openstack action_result = self.dispatch(meth, request, action_args)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 911, in dispatch
2015-06-09 05:51:19.383 TRACE nova.api.openstack return method(req=request, **action_args)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/compute/contrib/quota_classes.py", line 102, in update
2015-06-09 05:51:19.383 TRACE nova.api.openstack db.quota_class_create(context, quota_class, key, value)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/api.py", line 1088, in quota_class_create
2015-06-09 05:51:19.383 TRACE nova.api.openstack return IMPL.quota_class_create(context, class_name, resource, limit)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 215, in wrapper
2015-06-09 05:51:19.383 TRACE nova.api.openstack return f(*args, **kwargs)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 3186, in quota_class_create
2015-06-09 05:51:19.383 TRACE nova.api.openstack quota_class_ref.save()
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/models.py", line 82, in save
2015-06-09 05:51:19.383 TRACE nova.api.openstack super(NovaBase, self).save(session=session)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/models.py", line 48, in save
2015-06-09 05:51:19.383 TRACE nova.api.openstack session.flush()
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1985, in flush
2015-06-09 05:51:19.383 TRACE nova.api.openstack self._flush(objects)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2103, in _flush
2015-06-09 05:51:19.383 TRACE nova.api.openstack transaction.rollback(_capture_exception=True)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
2015-06-09 05:51:19.383 TRACE nova.api.openstack compat.reraise(exc_type, exc_value, exc_tb)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2067, in _flush
2015-06-09 05:51:19.383 TRACE nova.api.openstack flush_context.execute()
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute
2015-06-09 05:51:19.383 TRACE nova.api.openstack rec.execute(self)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 526, in execute
2015-06-09 05:51:19.383 TRACE nova.api.openstack uow
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 65, in save_obj
2015-06-09 05:51:19.383 TRACE nova.api.openstack mapper, table, insert)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 602, in _emit_insert_st
atements
2015-06-09 05:51:19.383 TRACE nova.api.openstack execute(statement, params)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 841, in execute
2015-06-09 05:51:19.383 TRACE nova.api.openstack return meth(self, multiparams, params)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 322, in _execute_on_connec
tion
2015-06-09 05:51:19.383 TRACE nova.api.openstack return connection._execute_clauseelement(self, multiparams, params)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 938, in _execute_clauseelem
ent
2015-06-09 05:51:19.383 TRACE nova.api.openstack compiled_sql, distilled_params
2015-06-09 05:51:19.383 TRACE nova.api.openstack context)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/compat/handle_error.py", line 261, in _handle_dbapi_exception
2015-06-09 05:51:19.383 TRACE nova.api.openstack e, statement, parameters, cursor, context)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1267, in _handle_dbapi_exception
2015-06-09 05:51:19.383 TRACE nova.api.openstack util.raise_from_cause(newraise, exc_info)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
2015-06-09 05:51:19.383 TRACE nova.api.openstack reraise(type(exception), exception, tb=exc_tb)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1063, in _execute_context
2015-06-09 05:51:19.383 TRACE nova.api.openstack context)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 442, in do_execute
2015-06-09 05:51:19.383 TRACE nova.api.openstack cursor.execute(statement, parameters)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
2015-06-09 05:51:19.383 TRACE nova.api.openstack self.errorhandler(self, exc, value)
2015-06-09 05:51:19.383 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
2015-06-09 05:51:19.383 TRACE nova.api.openstack raise errorclass, errorvalue
2015-06-09 05:51:19.383 TRACE nova.api.openstack DBError: (DataError) (1406, "Data too long for column 'class_name' at row 1") 'INSERT INTO quota_classes (created_at, updated_at, deleted_at, deleted, class_name, resource, hard_limit) VALUES (%s, %s, %s, %s, %s, %s, %s)' (datetime.datetime(2015, 6, 9, 12, 51, 19, 380807), None, None, 0, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'instances', 7)
2015-06-09 05:51:19.383 TRACE nova.api.openstack
2015-06-09 05:51:19.389 INFO nova.api.openstack [req-3f51a5c8-ccfc-4675-b224-a5cf94f0172d admin admin] http://10.69.4.136:8774/v2/bd00959429ab477f812822ac32638bd7/os-quota-class-sets/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa returned with HTTP 500

Tags: api
Changed in nova:
assignee: nobody → Pranali Deore (pranali-deore)
Revision history for this message
Markus Zoeller (markus_z) (mzoeller) wrote :

nice catch! testing with extreme values brings often a lot of fun :)

Changed in nova:
status: New → In Progress
tags: added: api
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/192115

Changed in nova:
assignee: Pranali Deore (pranali-deore) → Abhijeet Malawade (abhijeet-malawade)
Changed in nova:
assignee: Abhijeet Malawade (abhijeet-malawade) → Pranali Deore (pranali-deore)
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to nova (master)

Reviewed: https://review.openstack.org/192115
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=451d73217e171d664512ab46ba89c4086bfb02ab
Submitter: Jenkins
Branch: master

commit 451d73217e171d664512ab46ba89c4086bfb02ab
Author: PranaliDeore <email address hidden>
Date: Tue Jun 9 04:50:58 2015 -0700

    Validate quota class_name

    If you pass class name with more than 255 characters to
    quota-class-update api, then it returns 500 error code.

    Added a check to validate string limit and returned 400 if
    limit exceeds.

    Closes-Bug: #1463396
    Change-Id: I1bb924679ee41f48933b86b5509700ab716507f7

Changed in nova:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in nova:
milestone: none → liberty-3
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in nova:
milestone: liberty-3 → 12.0.0
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.