qos-create raises HTTP 500 error if you pass key or value greater than 255 characters

Bug #1603325 reported by Dinesh Bhor
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Cinder
Fix Released
Undecided
Dinesh Bhor

Bug Description

Description:

qos-create raises HTTP 500 error if you pass key or value greater than 255 characters

$ cinder qos-create <name> <key=value> [<key=value> ...]

1. "value" greater than 255 characters

cinder qos-create new12 key=somethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwe
fsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfw
efsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsf
wefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethings
fwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomething
sfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethin
gsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwef

OutPut:
ERROR: Failed to create qos_specs: new12 with specs {u'key': u'somethingsfwefsomethingsfwefsomething
sfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsf
wefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwe
fsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefs
omethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsom
ethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomet
hingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethi
ngsfwef'}. (HTTP 500) (Request-ID: req-bd6acd65-104c-45bd-b9b9-f9ee91df952b)

2. "key" greater than 255 characters

$ cinder qos-create abc testggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggg=vvv

Output:

ERROR: Failed to create qos_specs: abc with specs {'consumer': 'back-end', u'testgggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggg': u'vvv'}.
(HTTP 500) (Request-ID: req-52df270f-37b8-4d02-acfb-7b5795d17b67)

Current cinder commit:

commit e7dab03cb89ca74437dc7e7ddf0b11a02fe33669
Merge: ab32723 e9c217f
Author: Jenkins <email address hidden>
Date: Thu Jul 14 22:14:17 2016 +0000

    Merge "Move QualityOfServiceSpecs to use VersionedObject"

C-api logs:

2016-07-15 12:26:08.099 ERROR oslo_db.sqlalchemy.exc_filters [req-bd6acd65-104c-45bd-b9b9-f9ee91df952b 1fc9c667a67440a4b661f9c9ce7750f6 f5edfa59ddc54040bfc3b5aa762870d3]
DBAPIError exception wrapped from (pymysql.err.DataError) (1406, u"Data too long for column 'value' at row 1") [SQL: u'INSERT INTO quality_of_service_specs (created_at, u
pdated_at, deleted_at, deleted, id, specs_id, `key`, value) VALUES (%(created_at)s, %(updated_at)s, %(deleted_at)s, %(deleted)s, %(id)s, %(specs_id)s, %(key)s, %(value)s)
'] [parameters: {'deleted': 0, 'created_at': datetime.datetime(2016, 7, 15, 6, 56, 8, 75882), 'updated_at': None, 'value': u'somethingsfwefsomethingsfwefsomethingsfwefsom
ethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomet
hingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethi
ngsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomething
sfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwef', 'specs_id': 'd5602ab2-9d3a-49c4-8fd9-78f409b9aff8', 'key': u'key', 'deleted_at
': None, 'id': 'cdcbd67d-aff3-4d55-90e6-838fee27e738'}]
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters Traceback (most recent call last):
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters context)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 161, in execute
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters result = self._query(query)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 317, in _query
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters conn.query(q)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 837, in query
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1021, in _read_query_result
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters result.read()
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1304, in read
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet()
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 983, in _read_packet
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters packet.check_error()
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 395, in check_error
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters _check_mysql_exception(errinfo)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 112, in _check_mysql_exception
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters raise errorclass(errno, errorvalue)
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters DataError: (1406, u"Data too long for column 'value' at row 1")
2016-07-15 12:26:08.099 TRACE oslo_db.sqlalchemy.exc_filters
2016-07-15 12:26:08.226 ERROR cinder.objects.qos_specs [req-bd6acd65-104c-45bd-b9b9-f9ee91df952b 1fc9c667a67440a4b661f9c9ce7750f6 f5edfa59ddc54040bfc3b5aa762870d3] DB error occured when creating QoS specs.
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs Traceback (most recent call last):
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs File "/opt/stack/cinder/cinder/objects/qos_specs.py", line 137, in create
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs create_ret = db.qos_specs_create(self._context, updates)
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs File "/opt/stack/cinder/cinder/db/api.py", line 602, in qos_specs_create
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs return IMPL.qos_specs_create(context, values)
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs File "/opt/stack/cinder/cinder/db/sqlalchemy/api.py", line 178, in wrapper
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs return f(*args, **kwargs)
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs File "/opt/stack/cinder/cinder/db/sqlalchemy/api.py", line 3174, in qos_specs_create
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs raise db_exc.DBError(e)
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs DBError: (pymysql.err.DataError) (1406, u"Data too long for column 'value' at row 1") [SQL: u'INSERT INTO quality_of_service_specs (created_at, updated_at, deleted_at, deleted, id, specs_id, `key`, value) VALUES (%(created_at)s, %(updated_at)s, %(deleted_at)s, %(deleted)s, %(id)s, %(specs_id)s, %(key)s, %(value)s)'] [parameters: {'deleted': 0, 'created_at': datetime.datetime(2016, 7, 15, 6, 56, 8, 75882), 'updated_at': None, 'value': u'somethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwefsomethingsfwef', 'specs_id': 'd5602ab2-9d3a-49c4-8fd9-78f409b9aff8', 'key': u'key', 'deleted_at': None, 'id': 'cdcbd67d-aff3-4d55-90e6-838fee27e738'}]
2016-07-15 12:26:08.226 TRACE cinder.objects.qos_specs

Changed in cinder:
assignee: nobody → Dinesh Bhor (dinesh-bhor)
description: updated
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to cinder (master)

Fix proposed to branch: master
Review: https://review.openstack.org/342640

Changed in cinder:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to cinder (master)

Reviewed: https://review.openstack.org/342640
Committed: https://git.openstack.org/cgit/openstack/cinder/commit/?id=f5c3bb158e4e600379301281cb630d655c46d7e0
Submitter: Jenkins
Branch: master

commit f5c3bb158e4e600379301281cb630d655c46d7e0
Author: dineshbhor <email address hidden>
Date: Thu Jul 14 15:13:13 2016 +0530

    Fix 500 for 'qos-create' key or value > 255 characters

    Currently 'qos-create' raises 500 InternalServerError if
    you pass key or value greater than 255 characters. In the
    database 'key' and 'value' fields has 255 characters of
    maximum limit so if we pass more than that it raises DBError
    and finally exits with 500 InternalServerError.

    Renamed existing 'validate_extra_specs' from cinder.utils to
    reduce code duplication and used it to validate both key and
    value.

    Change-Id: I35b59fd6fc6cbcbefb112ad5d3470b89641bd3d8
    Closes-Bug: #1603325

Changed in cinder:
status: In Progress → Fix Released
Revision history for this message
Thierry Carrez (ttx) wrote : Fix included in openstack/cinder 9.0.0.0b3

This issue was fixed in the openstack/cinder 9.0.0.0b3 development milestone.

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.