yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #67881
[Bug 1718877] Re: nova-api returns 500 error(DBError) if nova list API is called with filters with empty string
Reviewed: https://review.openstack.org/506585
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=0cc94bfd5934e793cb8d739e132b52fa40bcddb0
Submitter: Jenkins
Branch: master
commit 0cc94bfd5934e793cb8d739e132b52fa40bcddb0
Author: Dinesh Bhor <dinesh.bhor@xxxxxxxxxxx>
Date: Tue Sep 19 14:56:01 2017 +0530
Fix 500 if list servers called with empty regex pattern
If nova list API is called with empty regex pattern like below:
http://<host-ip>/compute/v2.1/servers?name=""
it fails at db layer and returns 500 InternalServerError.
Empty string('') is a valid regex for re.compile [1] so nova-api fails
to catch it at schema layer and it is passed to databse for searching.
Database fails to search it with "REGEXP %(display_name_1)s)" and
'display_name_1' as u'' in sql query which leads to below error:
InternalError: (1139, u"Got error 'empty (sub)expression' from regexp")
This issue is there for every query parameter which is using below
regex parameter types defined in parameter_types.py:
common_query_regex_param
This patch fixes this issue by rejecting the request with 400 if the
provided filter regex is empty string. If user is intending to filter
something, user must pass something to the filter, it cannot be a empty
string.
[1] https://github.com/openstack/nova/blob/16.0.0/nova/api/validation/validators.py#L40
Closes-Bug: #1718877
Change-Id: I3f6fa04dc7267279964e8e5dd2a790b997a40e4e
** Changed in: nova
Status: In Progress => Fix Released
--
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/1718877
Title:
nova-api returns 500 error(DBError) if nova list API is called with
filters with empty string
Status in OpenStack Compute (nova):
Fix Released
Status in OpenStack Compute (nova) ocata series:
Confirmed
Status in OpenStack Compute (nova) pike series:
Confirmed
Bug description:
If nova list API is called with filter as empty regex pattern like below:
http://<host-ip>/compute/v2.1/servers?name=""
it fails at db layer with below error and returns 500 InternalServerError
to user:
InternalError: (1139, u"Got error 'empty (sub)expression' from
regexp")
Looks like the issue is there for every query parameter which is using below
regex parameter types defined in parameter_types.py:
common_query_regex_param
Reproduction steps:
Current nova master:
commit 2761b7fc40366644f611cb994342c5387f7fc6a1
Merge: bd37c64 8c44be5
Author: Jenkins <jenkins@xxxxxxxxxxxxxxxxxxxx>
Date: Tue Sep 19 02:58:27 2017 +0000
Merge "Updated from global requirements"
devstack:
commit 6c87f363a1255270a3711b3fe7a065cc693164b9
Merge: f60babc 1d141da
Author: Jenkins <jenkins@xxxxxxxxxxxxxxxxxxxx>
Date: Tue Sep 19 02:07:16 2017 +0000
Merge "Feature flag on tempest conf to notify enabled LDAP"
1] nova list API:
curl -g -i -X GET http://10.232.48.201/compute/v2.1/servers?name=""
-H "OpenStack-API-Version: compute 2.53" -H "User-Agent: python-novaclient"
-H "Accept: application/json" -H "X-OpenStack-Nova-API-Version: 2.53"
-H "X-Auth-Token: 2e403dfaae4a4d7fbcf0a9fc4f97d8e4"
HTTP/1.1 500 Internal Server Error
Date: Fri, 15 Sep 2017 10:34:39 GMT
Server: Apache/2.4.18 (Ubuntu)
OpenStack-API-Version: compute 2.53
X-OpenStack-Nova-API-Version: 2.53
Vary: OpenStack-API-Version,X-OpenStack-Nova-API-Version
Content-Type: application/json; charset=UTF-8
Content-Length: 199
x-openstack-request-id: req-85ae3592-3726-4e95-8bb9-9a9204dd7e68
x-compute-request-id: req-85ae3592-3726-4e95-8bb9-9a9204dd7e68
Connection: close
{"computeFault": {"message": "Unexpected API Error. Please report this
at http://bugs.launchpad.net/nova/ and attach the Nova API log if
possible.\n<class 'oslo_db.exception.DBError'>", "code": 500}}
Nova-API logs:
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters [None req-85ae3592-3726-4e95-8bb9-9a9204dd7e68 admin admin]
DBAPIError exception wrapped from (pymysql.err.InternalError) (1139, u"Got error 'empty (sub)expression' from regexp") [SQL: u'SELECT anon_1.instances_created_at AS anon_1_instances_created_at,
anon_1.instances_updated_at AS anon_1_instances_updated_at, anon_1.instances_deleted_at AS anon_1_instances_deleted_at, anon_1.instances_deleted AS anon_1_instances_deleted, anon_1.
instances_id AS anon_1_instances_id, anon_1.instances_user_id AS anon_1_instances_user_id, anon_1.instances_project_id AS anon_1_instances_project_id, anon_1.instances_image_ref AS anon_
1_instances_image_ref, anon_1.instances_kernel_id AS anon_1_instances_kernel_id, anon_1.instances_ramdisk_id AS anon_1_instances_ramdisk_id, anon_1.instances_hostname AS anon_1_instanc
es_hostname, anon_1.instances_launch_index AS anon_1_instances_launch_index, anon_1.instances_key_name AS anon_1_instances_key_name, anon_1.instances_key_data AS anon_1_instances_k
ey_data, anon_1.instances_power_state AS anon_1_instances_power_state, ano
n_1.instances_vm_state AS anon_1_instances_vm_state, anon_1.instances_task_state AS anon_1_instances_task_state, anon_1.instances_memory_mb AS anon_1_instances_memory_mb, anon_1.i
nstances_vcpus AS anon_1_instances_vcpus, anon_1.instances_root_gb AS anon_1_instances_root_gb, anon_1.instances_ephemeral_gb AS anon_1_instances_ephemeral_gb, anon_1.instances_ephe
meral_key_uuid AS anon_1_instances_ephemeral_key_uuid, anon_1.instances_host AS anon_1_instances_host, anon_1.instances_node AS anon_1_instances_node, anon_1.instances_instance_type
_id AS anon_1_instances_instance_type_id, anon_1.instances_user_data AS anon_1_instances_user_data, anon_1.instances_reservation_id AS anon_1_instances_reservation_id, anon_1.instances_lau
nched_at AS anon_1_instances_launched_at, anon_1.instances_terminated_at AS anon_1_instances_terminated_at, anon_1.instances_availability_zone AS anon_1_instances_availability
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: _zone, anon_1.instances_display_name AS anon_1_instances_display_name, anon_1.instances_display_description AS anon_1_in
stances_display_description, anon_1.instances_launched_on AS anon_1_instances_launched_on, anon_1.instances_locked AS anon_1_instances_locked, anon_1.instances_locked_by AS anon_1_insta
nces_locked_by, anon_1.instances_os_type AS anon_1_instances_os_type, anon_1.instances_architecture AS anon_1_instances_architecture, anon_1.instances_vm_mode AS anon_1_instances_vm_
mode, anon_1.instances_uuid AS anon_1_instances_uuid, anon_1.instances_root_device_name AS anon_1_instances_root_device_name, anon_1.instances_default_ephemeral_device AS anon_1_i
nstances_default_ephemeral_device, anon_1.instances_default_swap_device AS anon_1_instances_default_swap_device, anon_1.instances_config_drive AS anon_1_instances_config_drive, anon_1.i
nstances_access_ip_v4 AS anon_1_instances_access_ip_v4, anon_1.instances_access_ip_v6 AS anon_1_instances_access_ip_v6, anon_1.instances_auto_disk_config AS anon_1_instances_auto_disk_co
nfig, anon_1.instances_progress AS anon_1_instances_progress, anon_1.instances_shutdown_terminate AS anon_1_instances_shutdown_terminate, anon_1.instances_disable_terminate AS anon_1_in
stances_disable_terminate, anon_1.instances_cell_name AS anon_1_instances_cell_name, anon_1.instances_cleaned AS anon_1_instances_cleaned, security_groups_1.created_at AS security_groups_1
_created_at, security_groups_1.updated_at AS security_groups_1_updated_at, security_groups_1.deleted_at AS security_groups_1_deleted_at, security_groups_1.deleted AS security_groups_1_delete
d, security_groups_1.id AS security_groups_1_id, security_groups_1.name AS security_groups_1_name, security_groups_1.description AS security_groups_1_description, security_groups_1.user_id AS sec
urity_groups_1_user_id, security_groups_1.project_id AS security_groups_1_project_id, instance_info_caches_1.created_at AS instance_info_caches_1_created_at, instance_info_caches_1.updated_at A
S instance_info_caches_1_updated_at, instance_info_caches_1.
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: deleted_at AS instance_info_caches_1_deleted_at, instance_info_caches_1.deleted AS instance_info_caches_1_deleted, instance_in
fo_caches_1.id AS instance_info_caches_1_id, instance_info_caches_1.network_info AS instance_info_caches_1_network_info, instance_info_caches_1.instance_uuid AS instance_info_caches_1_instance_
uuid \nFROM (SELECT instances.created_at AS instances_created_at, instances.updated_at AS instances_updated_at, instances.deleted_at AS instances_deleted_at, instances.deleted AS instances_deleted, in
stances.id AS instances_id, instances.user_id AS instances_user_id, instances.project_id AS instances_project_id, instances.image_ref AS instances_image_ref, instances.kernel_id AS instances_kernel_id, insta
nces.ramdisk_id AS instances_ramdisk_id, instances.hostname AS instances_hostname, instances.launch_index AS instances_launch_index, instances.key_name AS instances_key_name, instances.key_data
AS instances_key_data, instances.power_state AS instances_power_state, instances.vm_state AS instances_vm_state, instances.task_state AS instances_task_state, instances.memory_mb AS instances_me
mory_mb, instances.vcpus AS instances_vcpus, instances.root_gb AS insta
nces_root_gb, instances.ephemeral_gb AS instances_ephemeral_gb, instances.ephemeral_key_uuid AS instances_ephemeral_key_uuid, instances.host AS instances_host, instances.node AS instances_node,
instances.instance_type_id AS instances_instance_type_id, instances.user_data AS instances_user_data, instances.reservation_id AS instances_reservation_id, instances.launched_at AS instances_launched_
at, instances.terminated_at AS instances_terminated_at, instances.availability_zone AS instances_availability_zone, instances.display_name AS instances_display_name, instances.display_description AS insta
nces_display_description, instances.launched_on AS instances_launched_on, instances.locked AS instances_locked, instances.locked_by AS instances_locked_by, instances.os_type AS instances_os_type, inst
ances.architecture AS instances_architecture, instances.vm_mode A
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: S instances_vm_mode, instances.uuid AS instances_uuid, instances.root_device_name AS instances_root_device_name, instances.default
_ephemeral_device AS instances_default_ephemeral_device, instances.default_swap_device AS instances_default_swap_device, instances.config_drive AS instances_config_drive, instances.access_ip_v4 AS i
nstances_access_ip_v4, instances.access_ip_v6 AS instances_access_ip_v6, instances.auto_disk_config AS instances_auto_disk_config, instances.progress AS instances_progress, instances.shutdown_terminat
e AS instances_shutdown_terminate, instances.disable_terminate AS instances_disable_terminate, instances.cell_name AS instances_cell_name, instances.cleaned AS instances_cleaned \nFROM instances \n
WHERE instances.deleted = %(deleted_1)s AND (instances.vm_state != %(vm_state_1)s OR instances.vm_state IS NULL) AND instances.project_id = %(project_id_1)s AND (instances.display_name
REGEXP %(display_name_1)s) ORDER BY instances.created_at DESC, instances.id DESC \n LIMIT %(param_1)s) AS anon_1 LEFT OUTER JOIN (security_group_instance_association AS security_group_instance_association_1
INNER JOIN security_groups AS security_groups_1 ON security_groups_1.id = security_group_instance_association_1.security_group_id AND security_group_instance_association_1.deleted = %(deleted_2)s AND
security_groups_1.deleted = %(deleted_3)s) ON security_group_instance_association_1.instance_uuid = anon_1.instances_uuid AND anon_1.instances_deleted = %(deleted_4)s LEFT OUTER JOIN instance_info_caches
AS instance_info_caches_1 ON instance_info_caches_1.instance_uuid = anon_1.instances_uuid ORDER BY anon_1.instances_created_at DESC, anon_1.instances_id DESC'] [parameters: {u'deleted_3': 0, u'
display_name_1': u'', u'deleted_4': 0, u'param_1': 1000, u'deleted_2': 0, u'deleted_1': 0, u'vm_state_1': 'soft-delete', u'project_id_1': u'038a2813bce843e1a49a512701f17ddf'}]: InternalError:
(1139, u"Got error 'empty (sub)expression' from regexp")
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters Traceback (most recent call last):
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters context)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 470, in do_execute
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters result = self._query(query)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters conn.query(q)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 856, in query
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1057, in _read_query_result
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters result.read()
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1340, in read
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet()
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1014, in _read_packet
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters packet.check_error()
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters raise errorclass(errno, errval)
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters InternalError: (1139, u"Got error 'empty (sub)expression' from regexp")
Sep 15 16:04:40 dbopenstack-VirtualBox devstack@n-api.service[989]: ERROR oslo_db.sqlalchemy.exc_filters
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1718877/+subscriptions
References