← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1642484] [NEW] create/update inventory placement APIs raises HTTP 500 Internal Server Error when int and float type parameters are greater than max limit

 

Public bug reported:

Create/update inventory APIs raises HTTP 500 Internal Server Error when total, reserved, min_unit,
max_unit, step_size int type and allocation_ratio float type parameters are greater than max limit

Steps to reproduce:

1. Passed int type total parameter value greater than db.MAX_INT
(2147483647)

$ curl -g -i -X POST
http://10.232.48.200/placement/resource_providers/e4f71c78-f988-4bd6-a372-d6be5102ad61/inventories
-H "Content-Type:  application/json" -H "X-Auth-Token:
5b9f0a1ec5554d779747000f886a573d" -d '{"resource_class": "DISK_GB",
"total": 20485454522222222222222222222222222, "reserved": 512,
"min_unit": 10, "max_unit": 1024, "step_size": 10, "allocation_ratio":
1.0}'

Output:

HTTP/1.1 500 Internal Server Error
Date: Tue, 08 Nov 2016 11:03:29 GMT
Server: Apache/2.4.7 (Ubuntu)
x-openstack-request-id: req-f929b916-5638-4a15-963f-3a6d816243b1
Content-Length: 128
Connection: close
Content-Type: application/json; charset=UTF-8

{"computeFault": {"message": "The server has either erred or is
incapable of performing the requested operation.", "code": 500}}

Error log:

2016-11-17 12:03:42.676 TRACE nova.api.openstack Traceback (most recent call last):
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
__init__.py", line 88, in __call__
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return req.get_response(self.applicatio
n)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1299, in send
2016-11-17 12:03:42.676 TRACE nova.api.openstack     application, catch_exc_info=False)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1263, in call_application
2016-11-17 12:03:42.676 TRACE nova.api.openstack     app_iter = application(self.environ, st
art_response)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/dec.py", line 130, in __call__
2016-11-17 12:03:42.676 TRACE nova.api.openstack     resp = self.call_func(req, *args, **sel
f.kwargs)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/dec.py", line 195, in call_func
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
placement/microversion.py", line 103, in __call__
2016-11-17 12:03:42.676 TRACE nova.api.openstack     response = req.get_response(self.applic
ation)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1299, in send
2016-11-17 12:03:42.676 TRACE nova.api.openstack     application, catch_exc_info=False)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1263, in call_application
2016-11-17 12:03:42.676 TRACE nova.api.openstack     app_iter = application(self.environ, start_response)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handler.py", line 188, in __call__
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return dispatch(environ, start_response, self._map)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handler.py", line 111, in dispatch
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return handler(environ, start_response)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2016-11-17 12:03:42.676 TRACE nova.api.openstack     resp = self.call_func(req, *args, **self.kwargs)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/util.py", line 133, in decorated_function
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return f(req)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handlers/inventory.py", line 212, in create_inventory
2016-11-17 12:03:42.676 TRACE nova.api.openstack     resource_provider.add_inventory(inventory)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 226, in wrapper
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return fn(self, *args, **kwargs)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 359, in add_inventory
2016-11-17 12:03:42.676 TRACE nova.api.openstack     _add_inventory(self._context, self, inventory)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/enginefacade.py", line 824, in wrapper
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return fn(*args, **kwargs)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 208, in _add_inventory
2016-11-17 12:03:42.676 TRACE nova.api.openstack     conn, rp, inv_list, set([rc_id]))
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 124, in _add_inventory_to_provider
2016-11-17 12:03:42.676 TRACE nova.api.openstack     conn.execute(ins_stmt)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return meth(self, multiparams, params)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
2016-11-17 12:03:42.676 TRACE nova.api.openstack     return connection._execute_clauseelement(self, multiparams, params)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
2016-11-17 12:03:42.676 TRACE nova.api.openstack     compiled_sql, distilled_params
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
2016-11-17 12:03:42.676 TRACE nova.api.openstack     context)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception
2016-11-17 12:03:42.676 TRACE nova.api.openstack     util.raise_from_cause(newraise, exc_info)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
2016-11-17 12:03:42.676 TRACE nova.api.openstack     reraise(type(exception), exception, tb=exc_tb, cause=cause)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
2016-11-17 12:03:42.676 TRACE nova.api.openstack     context)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
2016-11-17 12:03:42.676 TRACE nova.api.openstack     cursor.execute(statement, parameters)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
2016-11-17 12:03:42.676 TRACE nova.api.openstack     result = self._query(query)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
2016-11-17 12:03:42.676 TRACE nova.api.openstack     conn.query(q)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
2016-11-17 12:03:42.676 TRACE nova.api.openstack     self._affected_rows = self._read_query_result(unbuffered=unbuffered)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
2016-11-17 12:03:42.676 TRACE nova.api.openstack     result.read()
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
2016-11-17 12:03:42.676 TRACE nova.api.openstack     first_packet = self.connection._read_packet()
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
2016-11-17 12:03:42.676 TRACE nova.api.openstack     packet.check_error()
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
2016-11-17 12:03:42.676 TRACE nova.api.openstack     err.raise_mysql_exception(self._data)
2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
2016-11-17 12:03:42.676 TRACE nova.api.openstack     raise errorclass(errno, errval)
2016-11-17 12:03:42.676 TRACE nova.api.openstack DBDataError: (pymysql.err.DataError) (1264, u"Out of range value for column 'total' at row 1") [SQL: u'INSERT INTO inventories (created_at, resource_provider_id, resource_class_id, total, reserved, min_unit, max_unit, step_size, allocation_ratio) VALUES (%(created_at)s, %(resource_provider_id)s, %(resource_class_id)s, %(total)s, %(reserved)s, %(min_unit)s, %(max_unit)s, %(step_size)s, %(allocation_ratio)s)'] [parameters: {'allocation_ratio': 1.0, 'max_unit': 1024, 'reserved': 512, 'created_at': datetime.datetime(2016, 11, 17, 6, 33, 42, 668201), 'step_size': 10, 'min_unit': 10, 'resource_provider_id': 3, 'resource_class_id': 2, 'total': 20485454522222222222222222222222222L}]


2. Passed float type allocation_ratio parameter value greater than db.SQL_SP_FLOAT_MAX (3.40282e+38)


$ curl -g -i -X POST http://10.232.48.200/placement/resource_providers/e4f71c78-f988-4bd6-a372-d6be5102ad61/inventories -H "Content-Type:  application/json" -H "X-Auth-Token: d4f9623d1b294ed2821d996bbed1ef7a" -d '{"resource_class": "DISK_GB", "total": 1024, "reserved": 512, "min_unit": 10, "max_unit": 1024, "step_size": 10, "allocation_ratio": 3.40282e+40}'

Output:

HTTP/1.1 500 Internal Server Error
Date: Thu, 17 Nov 2016 06:38:44 GMT
Server: Apache/2.4.7 (Ubuntu)
x-openstack-request-id: req-06b36d98-bb0a-4ae8-a9a4-3c2981f538a3
Content-Length: 128
Connection: close
Content-Type: application/json; charset=UTF-8

{"computeFault": {"message": "The server has either erred or is
incapable of performing the requested operation.", "code": 500}}


Error log:

2016-11-17 12:08:44.239 TRACE nova.api.openstack Traceback (most recent call last):
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
__init__.py", line 88, in __call__
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return req.get_response(self.applicatio
n)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1299, in send
2016-11-17 12:08:44.239 TRACE nova.api.openstack     application, catch_exc_info=False)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1263, in call_application
2016-11-17 12:08:44.239 TRACE nova.api.openstack     app_iter = application(self.environ, st
art_response)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/dec.py", line 130, in __call__
2016-11-17 12:08:44.239 TRACE nova.api.openstack     resp = self.call_func(req, *args, **sel
f.kwargs)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/dec.py", line 195, in call_func
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
placement/microversion.py", line 103, in __call__
2016-11-17 12:08:44.239 TRACE nova.api.openstack     response = req.get_response(self.applic
ation)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1299, in send
2016-11-17 12:08:44.239 TRACE nova.api.openstack     application, catch_exc_info=False)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/request.py", line 1263, in call_application
2016-11-17 12:08:44.239 TRACE nova.api.openstack     app_iter = application(self.environ, st
art_response)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
placement/handler.py", line 188, in __call__
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return dispatch(environ, start_response
, self._map)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
placement/handler.py", line 111, in dispatch
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return handler(environ, start_response)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/dec.py", line 130, in __call__
2016-11-17 12:08:44.239 TRACE nova.api.openstack     resp = self.call_func(req, *args, **sel
f.kwargs)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
ges/webob/dec.py", line 195, in call_func
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/util.py", line 133, in decorated_function
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return f(req)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handlers/inventory.py", line 212, in create_inventory
2016-11-17 12:08:44.239 TRACE nova.api.openstack     resource_provider.add_inventory(inventory)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 226, in wrapper
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return fn(self, *args, **kwargs)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 359, in add_inventory
2016-11-17 12:08:44.239 TRACE nova.api.openstack     _add_inventory(self._context, self, inventory)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/enginefacade.py", line 824, in wrapper
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return fn(*args, **kwargs)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 208, in _add_inventory
2016-11-17 12:08:44.239 TRACE nova.api.openstack     conn, rp, inv_list, set([rc_id]))
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 124, in _add_inventory_to_provider
2016-11-17 12:08:44.239 TRACE nova.api.openstack     conn.execute(ins_stmt)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return meth(self, multiparams, params)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
2016-11-17 12:08:44.239 TRACE nova.api.openstack     return connection._execute_clauseelement(self, multiparams, params)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
2016-11-17 12:08:44.239 TRACE nova.api.openstack     compiled_sql, distilled_params
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
2016-11-17 12:08:44.239 TRACE nova.api.openstack     context)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception
2016-11-17 12:08:44.239 TRACE nova.api.openstack     util.raise_from_cause(newraise, exc_info)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
2016-11-17 12:08:44.239 TRACE nova.api.openstack     reraise(type(exception), exception, tb=exc_tb, cause=cause)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
2016-11-17 12:08:44.239 TRACE nova.api.openstack     context)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
2016-11-17 12:08:44.239 TRACE nova.api.openstack     cursor.execute(statement, parameters)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
2016-11-17 12:08:44.239 TRACE nova.api.openstack     result = self._query(query)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
2016-11-17 12:08:44.239 TRACE nova.api.openstack     conn.query(q)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
2016-11-17 12:08:44.239 TRACE nova.api.openstack     self._affected_rows = self._read_query_result(unbuffered=unbuffered)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
2016-11-17 12:08:44.239 TRACE nova.api.openstack     result.read()
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
2016-11-17 12:08:44.239 TRACE nova.api.openstack     first_packet = self.connection._read_packet()
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
2016-11-17 12:08:44.239 TRACE nova.api.openstack     packet.check_error()
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
2016-11-17 12:08:44.239 TRACE nova.api.openstack     err.raise_mysql_exception(self._data)
2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
2016-11-17 12:08:44.239 TRACE nova.api.openstack     raise errorclass(errno, errval)
2016-11-17 12:08:44.239 TRACE nova.api.openstack DBDataError: (pymysql.err.DataError) (1264, u"Out of range value for column 'allocation_ratio' at row 1") [SQL: u'INSERT INTO inventories (created_at, resource_provider_id, resource_class_id, total, reserved, min_unit, max_unit, step_size, allocation_ratio) VALUES (%(created_at)s, %(resource_provider_id)s, %(resource_class_id)s, %(total)s, %(reserved)s, %(min_unit)s, %(max_unit)s, %(step_size)s, %(allocation_ratio)s)'] [parameters: {'allocation_ratio': 3.40282e+40, 'total': 1024, 'reserved': 512, 'created_at': datetime.datetime(2016, 11, 17, 6, 38, 44, 233809), 'step_size': 10, 'resource_provider_id': 3, 'min_unit': 10, 'resource_class_id': 2, 'max_unit': 1024}]

** Affects: nova
     Importance: Undecided
     Assignee: Bhagyashri Shewale (bhagyashri-shewale)
         Status: New

** Changed in: nova
     Assignee: (unassigned) => Bhagyashri Shewale (bhagyashri-shewale)

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1642484

Title:
  create/update inventory placement APIs raises HTTP 500 Internal Server
  Error when int and float type parameters are greater than max limit

Status in OpenStack Compute (nova):
  New

Bug description:
  Create/update inventory APIs raises HTTP 500 Internal Server Error when total, reserved, min_unit,
  max_unit, step_size int type and allocation_ratio float type parameters are greater than max limit

  Steps to reproduce:

  1. Passed int type total parameter value greater than db.MAX_INT
  (2147483647)

  $ curl -g -i -X POST
  http://10.232.48.200/placement/resource_providers/e4f71c78-f988-4bd6-a372-d6be5102ad61/inventories
  -H "Content-Type:  application/json" -H "X-Auth-Token:
  5b9f0a1ec5554d779747000f886a573d" -d '{"resource_class": "DISK_GB",
  "total": 20485454522222222222222222222222222, "reserved": 512,
  "min_unit": 10, "max_unit": 1024, "step_size": 10, "allocation_ratio":
  1.0}'

  Output:

  HTTP/1.1 500 Internal Server Error
  Date: Tue, 08 Nov 2016 11:03:29 GMT
  Server: Apache/2.4.7 (Ubuntu)
  x-openstack-request-id: req-f929b916-5638-4a15-963f-3a6d816243b1
  Content-Length: 128
  Connection: close
  Content-Type: application/json; charset=UTF-8

  {"computeFault": {"message": "The server has either erred or is
  incapable of performing the requested operation.", "code": 500}}

  Error log:

  2016-11-17 12:03:42.676 TRACE nova.api.openstack Traceback (most recent call last):
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
  __init__.py", line 88, in __call__
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return req.get_response(self.applicatio
  n)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1299, in send
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     application, catch_exc_info=False)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1263, in call_application
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     app_iter = application(self.environ, st
  art_response)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/dec.py", line 130, in __call__
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     resp = self.call_func(req, *args, **sel
  f.kwargs)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/dec.py", line 195, in call_func
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
  placement/microversion.py", line 103, in __call__
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     response = req.get_response(self.applic
  ation)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1299, in send
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     application, catch_exc_info=False)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1263, in call_application
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     app_iter = application(self.environ, start_response)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handler.py", line 188, in __call__
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return dispatch(environ, start_response, self._map)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handler.py", line 111, in dispatch
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return handler(environ, start_response)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     resp = self.call_func(req, *args, **self.kwargs)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/util.py", line 133, in decorated_function
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return f(req)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handlers/inventory.py", line 212, in create_inventory
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     resource_provider.add_inventory(inventory)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 226, in wrapper
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return fn(self, *args, **kwargs)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 359, in add_inventory
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     _add_inventory(self._context, self, inventory)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/enginefacade.py", line 824, in wrapper
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return fn(*args, **kwargs)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 208, in _add_inventory
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     conn, rp, inv_list, set([rc_id]))
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 124, in _add_inventory_to_provider
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     conn.execute(ins_stmt)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return meth(self, multiparams, params)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     return connection._execute_clauseelement(self, multiparams, params)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     compiled_sql, distilled_params
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     context)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     util.raise_from_cause(newraise, exc_info)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     reraise(type(exception), exception, tb=exc_tb, cause=cause)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     context)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     cursor.execute(statement, parameters)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     result = self._query(query)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     conn.query(q)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     result.read()
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     first_packet = self.connection._read_packet()
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     packet.check_error()
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     err.raise_mysql_exception(self._data)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
  2016-11-17 12:03:42.676 TRACE nova.api.openstack     raise errorclass(errno, errval)
  2016-11-17 12:03:42.676 TRACE nova.api.openstack DBDataError: (pymysql.err.DataError) (1264, u"Out of range value for column 'total' at row 1") [SQL: u'INSERT INTO inventories (created_at, resource_provider_id, resource_class_id, total, reserved, min_unit, max_unit, step_size, allocation_ratio) VALUES (%(created_at)s, %(resource_provider_id)s, %(resource_class_id)s, %(total)s, %(reserved)s, %(min_unit)s, %(max_unit)s, %(step_size)s, %(allocation_ratio)s)'] [parameters: {'allocation_ratio': 1.0, 'max_unit': 1024, 'reserved': 512, 'created_at': datetime.datetime(2016, 11, 17, 6, 33, 42, 668201), 'step_size': 10, 'min_unit': 10, 'resource_provider_id': 3, 'resource_class_id': 2, 'total': 20485454522222222222222222222222222L}]

  
  2. Passed float type allocation_ratio parameter value greater than db.SQL_SP_FLOAT_MAX (3.40282e+38)

  
  $ curl -g -i -X POST http://10.232.48.200/placement/resource_providers/e4f71c78-f988-4bd6-a372-d6be5102ad61/inventories -H "Content-Type:  application/json" -H "X-Auth-Token: d4f9623d1b294ed2821d996bbed1ef7a" -d '{"resource_class": "DISK_GB", "total": 1024, "reserved": 512, "min_unit": 10, "max_unit": 1024, "step_size": 10, "allocation_ratio": 3.40282e+40}'

  Output:

  HTTP/1.1 500 Internal Server Error
  Date: Thu, 17 Nov 2016 06:38:44 GMT
  Server: Apache/2.4.7 (Ubuntu)
  x-openstack-request-id: req-06b36d98-bb0a-4ae8-a9a4-3c2981f538a3
  Content-Length: 128
  Connection: close
  Content-Type: application/json; charset=UTF-8

  {"computeFault": {"message": "The server has either erred or is
  incapable of performing the requested operation.", "code": 500}}

  
  Error log:

  2016-11-17 12:08:44.239 TRACE nova.api.openstack Traceback (most recent call last):
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
  __init__.py", line 88, in __call__
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return req.get_response(self.applicatio
  n)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1299, in send
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     application, catch_exc_info=False)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1263, in call_application
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     app_iter = application(self.environ, st
  art_response)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/dec.py", line 130, in __call__
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     resp = self.call_func(req, *args, **sel
  f.kwargs)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/dec.py", line 195, in call_func
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
  placement/microversion.py", line 103, in __call__
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     response = req.get_response(self.applic
  ation)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1299, in send
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     application, catch_exc_info=False)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/request.py", line 1263, in call_application
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     app_iter = application(self.environ, st
  art_response)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
  placement/handler.py", line 188, in __call__
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return dispatch(environ, start_response
  , self._map)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/
  placement/handler.py", line 111, in dispatch
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return handler(environ, start_response)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/dec.py", line 130, in __call__
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     resp = self.call_func(req, *args, **sel
  f.kwargs)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packa
  ges/webob/dec.py", line 195, in call_func
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return self.func(req, *args, **kwargs)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/util.py", line 133, in decorated_function
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return f(req)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/api/openstack/placement/handlers/inventory.py", line 212, in create_inventory
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     resource_provider.add_inventory(inventory)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 226, in wrapper
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return fn(self, *args, **kwargs)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 359, in add_inventory
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     _add_inventory(self._context, self, inventory)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/enginefacade.py", line 824, in wrapper
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return fn(*args, **kwargs)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 208, in _add_inventory
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     conn, rp, inv_list, set([rc_id]))
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/opt/stack/nova/nova/objects/resource_provider.py", line 124, in _add_inventory_to_provider
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     conn.execute(ins_stmt)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return meth(self, multiparams, params)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     return connection._execute_clauseelement(self, multiparams, params)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     compiled_sql, distilled_params
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     context)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     util.raise_from_cause(newraise, exc_info)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     reraise(type(exception), exception, tb=exc_tb, cause=cause)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     context)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     cursor.execute(statement, parameters)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     result = self._query(query)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     conn.query(q)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     result.read()
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     first_packet = self.connection._read_packet()
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     packet.check_error()
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     err.raise_mysql_exception(self._data)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack   File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
  2016-11-17 12:08:44.239 TRACE nova.api.openstack     raise errorclass(errno, errval)
  2016-11-17 12:08:44.239 TRACE nova.api.openstack DBDataError: (pymysql.err.DataError) (1264, u"Out of range value for column 'allocation_ratio' at row 1") [SQL: u'INSERT INTO inventories (created_at, resource_provider_id, resource_class_id, total, reserved, min_unit, max_unit, step_size, allocation_ratio) VALUES (%(created_at)s, %(resource_provider_id)s, %(resource_class_id)s, %(total)s, %(reserved)s, %(min_unit)s, %(max_unit)s, %(step_size)s, %(allocation_ratio)s)'] [parameters: {'allocation_ratio': 3.40282e+40, 'total': 1024, 'reserved': 512, 'created_at': datetime.datetime(2016, 11, 17, 6, 38, 44, 233809), 'step_size': 10, 'resource_provider_id': 3, 'min_unit': 10, 'resource_class_id': 2, 'max_unit': 1024}]

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1642484/+subscriptions


Follow ups