quota-class-update api return 500 error if value is above mysql INT type

Bug #1463387 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 api return 500 error if update value is greater than mysql INT type.

steps to reproduce:

$ nova quota-class-update --instances 2147483648 default
ERROR: The server has either erred or is incapable of performing the requested operation. (HTTP 500)

or
curl -g -i --cacert "/opt/stack/data/CA/int-ca/ca-chain.pem" -X PUT http://10.69.4.136:8774/v3/bd00959429ab477f812822ac32638bd7/os-quota-class-sets/default -H "User-Agent: python-novaclient" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: 4846614c5c3341f5a1828a987d692d5f" -d '{"quota_class_set": {"instances": 2147483648}}'

n-api error logs:

2015-06-09 04:32:40.215 ERROR oslo_db.sqlalchemy.exc_filters [req-dbe4c88d-0baa-4a8a-bf1a-3272412723a5 admin admin] DBAPIError exception wrapped from (DataE
rror) (1264, "Out of range value for column 'hard_limit' at row 8") 'UPDATE quota_classes SET updated_at=%s, hard_limit=%s WHERE quota_classes.deleted = %s
AND quota_classes.class_name = %s AND quota_classes.resource = %s' (datetime.datetime(2015, 6, 9, 11, 32, 40, 214756), 2147483648, 0, 'default', 'instances'
)
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters Traceback (most recent call last):
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1063, in _execu
te_context
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters context)
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 442, in do_e
xecute
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters)
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters self.errorhandler(self, exc, value)
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandl
er
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters raise errorclass, errorvalue
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters DataError: (1264, "Out of range value for column 'hard_limit' at row 8")
2015-06-09 04:32:40.215 TRACE oslo_db.sqlalchemy.exc_filters
2015-06-09 04:32:40.217 ERROR nova.api.openstack [req-dbe4c88d-0baa-4a8a-bf1a-3272412723a5 admin admin] Caught error: (DataError) (1264, "Out of range value
 for column 'hard_limit' at row 8") 'UPDATE quota_classes SET updated_at=%s, hard_limit=%s WHERE quota_classes.deleted = %s AND quota_classes.class_name = %
s AND quota_classes.resource = %s' (datetime.datetime(2015, 6, 9, 11, 32, 40, 214756), 2147483648, 0, 'default', 'instances')
2015-06-09 04:32:40.217 TRACE nova.api.openstack Traceback (most recent call last):
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/__init__.py", line 126, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack return req.get_response(self.application)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1317, in send
2015-06-09 04:32:40.217 TRACE nova.api.openstack application, catch_exc_info=False)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1281, in call_application
2015-06-09 04:32:40.217 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 04:32:40.217 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 04:32:40.217 TRACE nova.api.openstack return self._call_app(env, start_response)
2015-06-09 04:32:40.217 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 04:32:40.217 TRACE nova.api.openstack return self._app(env, _fake_start_response)

2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/routes/middleware.py", line 136, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack response = self.app(environ, start_response)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack return resp(environ, start_response)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2015-06-09 04:32:40.217 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 756, in __call__
2015-06-09 04:32:40.217 TRACE nova.api.openstack content_type, body, accept)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 821, in _process_stack
2015-06-09 04:32:40.217 TRACE nova.api.openstack action_result = self.dispatch(meth, request, action_args)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 911, in dispatch
2015-06-09 04:32:40.217 TRACE nova.api.openstack return method(req=request, **action_args)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/compute/contrib/quota_classes.py", line 76, in update
2015-06-09 04:32:40.217 TRACE nova.api.openstack utils.check_string_length(id, 'quota_class',
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/api.py", line 1108, in quota_class_update
2015-06-09 04:32:40.217 TRACE nova.api.openstack return IMPL.quota_class_update(context, class_name, resource, limit)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 215, in wrapper
2015-06-09 04:32:40.217 TRACE nova.api.openstack return f(*args, **kwargs)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 3195, in quota_class_update
2015-06-09 04:32:40.217 TRACE nova.api.openstack update({'hard_limit': limit})
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2851, in update
2015-06-09 04:32:40.217 TRACE nova.api.openstack update_op.exec_()
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 897, in exec_
2015-06-09 04:32:40.217 TRACE nova.api.openstack self._do_exec()
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 995, in _do_exec
2015-06-09 04:32:40.217 TRACE nova.api.openstack update_stmt, params=self.query._params)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1021, in execute
2015-06-09 04:32:40.217 TRACE nova.api.openstack bind, close_with_result=True).execute(clause, params or {})
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 841, in execute
2015-06-09 04:32:40.217 TRACE nova.api.openstack return meth(self, multiparams, params)
2015-06-09 04:32:40.217 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 04:32:40.217 TRACE nova.api.openstack return connection._execute_clauseelement(self, multiparams, params)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 938, in _execute_clauseelement
2015-06-09 04:32:40.217 TRACE nova.api.openstack compiled_sql, distilled_params
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1070, in _execute_context
2015-06-09 04:32:40.217 TRACE nova.api.openstack context)
2015-06-09 04:32:40.217 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 04:32:40.217 TRACE nova.api.openstack e, statement, parameters, cursor, context)
2015-06-09 04:32:40.217 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 04:32:40.217 TRACE nova.api.openstack util.raise_from_cause(newraise, exc_info)
2015-06-09 04:32:40.217 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 04:32:40.217 TRACE nova.api.openstack reraise(type(exception), exception, tb=exc_tb)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1063, in _execute_context
2015-06-09 04:32:40.217 TRACE nova.api.openstack context)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 442, in do_execute
2015-06-09 04:32:40.217 TRACE nova.api.openstack cursor.execute(statement, parameters)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
2015-06-09 04:32:40.217 TRACE nova.api.openstack self.errorhandler(self, exc, value)
2015-06-09 04:32:40.217 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
2015-06-09 04:32:40.217 TRACE nova.api.openstack raise errorclass, errorvalue
2015-06-09 04:32:40.217 TRACE nova.api.openstack DBError: (DataError) (1264, "Out of range value for column 'hard_limit' at row 8") 'UPDATE quota_classes SET updated_at=%s, hard_limit=%s WHERE quota_classes.deleted = %s AND quota_classes.class_name = %s AND quota_classes.resource = %s' (datetime.datetime(2015, 6, 9, 11, 32, 40, 214756), 2147483648, 0, 'default', 'instances')
2015-06-09 04:32:40.217 TRACE nova.api.openstack
2015-06-09 04:32:40.223 INFO nova.api.openstack [req-dbe4c88d-0baa-4a8a-bf1a-3272412723a5 admin admin] http://10.69.4.136:8774/v2/bd00959429ab477f812822ac32638bd7/os-quota-class-sets/default returned with HTTP 500

Tags: api
Changed in nova:
assignee: nobody → Pranali Deore (pranali-deore)
tags: added: api
Changed in nova:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to nova (master)

Reviewed: https://review.openstack.org/193132
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=013e3227336c00a8a6d5b2b697b3c93beb2d0701
Submitter: Jenkins
Branch: master

commit 013e3227336c00a8a6d5b2b697b3c93beb2d0701
Author: PranaliDeore <email address hidden>
Date: Tue Jun 9 02:11:33 2015 -0700

    Validate maximum limit for integer

    If you pass limit value above mysql INT type to
    quota-class-update api, then it raises 500 internal
    server error.

    Passed max_value=db.MAX_INT to validate_integer()
    method to get appropriate error.

    Closes-Bug: #1463387
    Change-Id: I1075a20ea0142db6c35f1124ba40b23ffef4c2f8

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