← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1546396] Re: Nova api throws 500 error when invalid name passed to servers

 

Reviewed:  https://review.openstack.org/282190
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=117fad897d5310d66cc2e690f3cd32e72614d8fd
Submitter: Jenkins
Branch:    master

commit 117fad897d5310d66cc2e690f3cd32e72614d8fd
Author: jichenjc <jichenjc@xxxxxxxxxx>
Date:   Fri Feb 26 12:52:07 2016 +0800

    Refactor REGEX filters to eliminate 500 errors
    
    You can currently create a 500 error on mysql by passing | as the name
    filter because mysql assumes regex values are well crafted by the
    application layer.
    
    This puts in facilities to provide a safe regex filter per db engine.
    
    It also refactors some of the inline code from _regex_instance_filter
    into slightly more logical blocks, which will make it a little more
    straight forward about where we need to do something smarter about
    determining the dbtype in a cellsv2 world.
    
    Change-Id: Ice2e21666905fdb76c001195e8fca21b427ea737
    Closes-Bug: 1546396


** 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/1546396

Title:
  Nova api throws 500 error when invalid name passed to servers

Status in OpenStack Compute (nova):
  Fix Released

Bug description:

  System was running with 2k cirrOS vm on 100 KVM hypervisors, and
  seeing below DB exception while trying to delete using nova api.

  
  Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.
  <class 'oslo_db.exception.DBError'> (HTTP 500) (Request-ID: req-379addbc-c4e5-43b4-bf37-f64436e13750)

  stack@controller:/opt/stack/nova$ git log -1
  commit 5aee67a80a30725a7d2b95533baf8bfb73476ef1
  Merge: 2e28de7 0ecc870
  Author: Jenkins <jenkins@xxxxxxxxxxxxxxxxxxxx>
  Date:   Mon Feb 15 21:56:09 2016 +0000

      Merge "Move Disk allocation ratio to ResourceTracker"
  stack@controller:/opt/stack/nova$ 

  Have attached nova-api logs to bug.

  Logs:

  2016-02-16 20:47:29.186 DEBUG nova.api.openstack.wsgi [req-eff95987-035d-48fe-8c3b-5b947167e72c admin admin] Calling method '<bound method ServersController.index of <nova.api.openstack.compute.servers.Se
  rversController object at 0x7fb61374f210>>' from (pid=29444) _process_stack /opt/stack/nova/nova/api/openstack/wsgi.py:699
  2016-02-16 20:47:29.187 DEBUG nova.compute.api [req-eff95987-035d-48fe-8c3b-5b947167e72c admin admin] Searching by: {'deleted': False, 'project_id': u'3122784921764f0c8e2ca9feb5fc7424', u'name': u'|'} fro
  m (pid=29444) get_all /opt/stack/nova/nova/compute/api.py:2001
  2016-02-16 20:47:29.225 ERROR oslo_db.sqlalchemy.exc_filters [req-eff95987-035d-48fe-8c3b-5b947167e72c 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_instances_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_key_data, anon_1.instances_power_state AS anon_1_instances_power_state, anon_1.instances_vm_state AS anon_1_instances_vm_state, anon_1.instances_task_state AS anon_1_instances_task_sta
  te, anon_1.instances_memory_mb AS anon_1_instances_memory_mb, anon_1.instances_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_ephemeral_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.insta
  nces_launched_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_zone, anon_1.instanc
  es_display_name AS anon_1_instances_display_name, anon_1.instances_display_description AS anon_1_instances_display_description, anon_1.instances_launched_on AS anon_1_instances_launched_on, anon_1.instanc
  es_locked AS anon_1_instances_locked, anon_1.instances_locked_by AS anon_1_instances_locked_by, anon_1.instances_os_type AS anon_1_instances_os_type, anon_1.instances_architecture AS anon_1_instances_arch
  itecture, 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_def
  ault_ephemeral_device AS anon_1_instances_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_d
  rive, anon_1.instances_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_config
  , 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_instances_disable_termina
  te, anon_1.instances_cell_name AS anon_1_instances_cell_name, anon_1.instances_internal_id AS anon_1_instances_internal_id, anon_1.instances_cleaned AS anon_1_instances_cleaned, instance_info_caches_1.cre
  ated_at AS instance_info_caches_1_created_at, instance_info_caches_1.updated_at AS instance_info_caches_1_updated_at, instance_info_caches_1.deleted_at AS instance_info_caches_1_deleted_at, instance_info_
  caches_1.deleted AS instance_info_caches_1_deleted, instance_info_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, 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.dele
  ted_at AS security_groups_1_deleted_at, security_groups_1.deleted AS security_groups_1_deleted, security_groups_1.id AS security_groups_1_id, security_groups_1.name AS security_groups_1_name, security_gro
  ups_1.description AS security_groups_1_description, security_groups_1.user_id AS security_groups_1_user_id, security_groups_1.project_id AS security_groups_1_project_id \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, instances.id AS instances_id, instances.user_i
  d 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, instances.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 ins
  tances_power_state, instances.vm_state AS instances_vm_state, instances.task_state AS instances_task_state, instances.memory_mb AS instances_memory_mb, instances.vcpus AS instances_vcpus, instances.root_g
  b AS instances_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 instances
  _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, instances.architecture AS instances_architecture, instances.vm_mode AS 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 instances_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_terminate AS instances_shutdown_terminate, instances.disable_terminate AS instances_disable_terminate, instances.cell_name AS instances_cell_name, instances.internal_id AS instances_internal_id, instances.cleaned AS instances_cleaned \nFROM instances \nWHERE 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 instance_info_caches AS instance_info_caches_1 ON instance_info_caches_1.instance_uuid = anon_1.instances_uuid 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 ORDER BY anon_1.instances_created_at DESC, anon_1.instances_id DESC'] [parameters: {u'param_1': 1000, u'display_name_1': u'|', u'deleted_4': 0, u'deleted_3': 0, u'deleted_2': 0, u'deleted_1': 0, u'vm_state_1': 'soft-delete', u'project_id_1': u'3122784921764f0c8e2ca9feb5fc7424'}]
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters Traceback (most recent call last):
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     context)
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     cursor.execute(statement, parameters)
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 146, in execute
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     result = self._query(query)
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 296, in _query
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     conn.query(q)
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 819, in query2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1001, in _read_query_result2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     result.read()
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1285, in read2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     first_packet = self.connection._read_packet()
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 965, in _read_packet2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     packet.check_error()2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 394, in check_error2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     err.raise_mysql_exception(self._data)2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     _check_mysql_exception(errinfo)2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters   File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 115, in _check_mysql_exception2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters     raise InternalError(errno, errorvalue)
  2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters InternalError: (1139, u"Got error 'empty (sub)expression' from regexp")2016-02-16 20:47:29.225 TRACE oslo_db.sqlalchemy.exc_filters
  2016-02-16 20:47:29.231 ERROR nova.api.openstack.extensions [req-eff95987-035d-48fe-8c3b-5b947167e72c admin admin] Unexpected exception in API method

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


References