regex filtering with postgresql backend fails

Bug #1423171 reported by Chris Dent
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Ceilometer
Fix Released
Medium
Ilya Tyaptin

Bug Description

The test 'test_filter_with_regexp' test fails when use postgresql as the backend, failure log below.

This suggests that commit https://github.com/openstack/ceilometer/commit/4a7af8595d2a9d952f616d2a9ac65d239c422201 was not tested against that backend. Do we need a gate job that uses it?

For reference: regexp is a mysql specific operator. It looks like the similar thing in postgres is '~':

* http://dev.mysql.com/doc/refman/5.1/en/regexp.html

* http://www.postgresql.org/docs/9.3/static/functions-matching.html

======================================================================
FAIL: ceilometer.tests.storage.test_storage_scenarios.ComplexAlarmQueryTest.test_filter_with_regexp(pgsql)
tags: worker-0
----------------------------------------------------------------------
Traceback (most recent call last):
  File "ceilometer/tests/base.py", line 97, in skip_if_not_implemented
    return func(*args, **kwargs)
  File "ceilometer/tests/storage/test_storage_scenarios.py", line 2975, in test_filter_with_regexp
    result = list(self.alarm_conn.query_alarms(filter_expr=filter_expr))
  File "ceilometer/alarm/storage/impl_sqlalchemy.py", line 242, in query_alarms
    return self._retrieve_data(filter_expr, orderby, limit, models.Alarm)
  File "ceilometer/alarm/storage/impl_sqlalchemy.py", line 118, in _retrieve_data
    return retrieve[table](transformer.get_query())
  File "ceilometer/alarm/storage/impl_sqlalchemy.py", line 142, in _retrieve_alarms
    return (self._row_to_alarm_model(x) for x in query.all())
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2320, in all
    return list(self)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2438, in __iter__
    return self._execute_and_instances(context)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2453, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 729, in execute
    return meth(self, multiparams, params)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 322, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 958, in _execute_context
    context)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1155, in _handle_dbapi_exception
    util.raise_from_cause(newraise, exc_info)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 951, in _execute_context
    context)
  File "/home/cdent/src/ceilometer/.tox/py-pgsql/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 436, in do_execute
    cursor.execute(statement, parameters)
DBError: (ProgrammingError) syntax error at or near "regexp"
LINE 3: ... alarm.name = 'red-alert') AND (alarm.description regexp 'ye...
                                                             ^
 'SELECT alarm.alarm_id AS alarm_alarm_id, alarm.enabled AS alarm_enabled, alarm.name AS alarm_name, alarm.type AS alarm_type, alarm.severity AS alarm_severity, alarm.description AS alarm_description, alarm.timestamp AS alarm_timestamp, alarm.user_id AS alarm_user_id, alarm.project_id AS alarm_project_id, alarm.state AS alarm_state, alarm.state_timestamp AS alarm_state_timestamp, alarm.ok_actions AS alarm_ok_actions, alarm.alarm_actions AS alarm_alarm_actions, alarm.insufficient_data_actions AS alarm_insufficient_data_actions, alarm.repeat_actions AS alarm_repeat_actions, alarm.rule AS alarm_rule, alarm.time_constraints AS alarm_time_constraints \nFROM alarm \nWHERE (alarm.name = %(name_1)s OR alarm.name = %(name_2)s) AND (alarm.description regexp %(description_1)s) ORDER BY alarm.timestamp DESC' {'name_2': 'red-alert', 'name_1': 'yellow-alert', 'description_1': 'yel.*'}

Changed in ceilometer:
assignee: nobody → Lena Novokshonova (enovokshonova)
Ilya Tyaptin (ityaptin)
Changed in ceilometer:
assignee: Lena Novokshonova (enovokshonova) → Ilya Tyaptin (ityaptin)
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to ceilometer (master)

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

Changed in ceilometer:
status: New → In Progress
Eoghan Glynn (eglynn)
Changed in ceilometer:
milestone: none → kilo-3
importance: Undecided → Medium
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to ceilometer (master)

Reviewed: https://review.openstack.org/157334
Committed: https://git.openstack.org/cgit/openstack/ceilometer/commit/?id=645f6b9868d75cf98cf0cadf91f0bdd1dc564571
Submitter: Jenkins
Branch: master

commit 645f6b9868d75cf98cf0cadf91f0bdd1dc564571
Author: Ilya Tyaptin <email address hidden>
Date: Thu Feb 19 13:29:01 2015 +0300

    [PostgreSQL] Fix regexp operator

    Add different operators relative to dialect.
    It's needed to support same regexp format for all backends.

    Closes-bug: 1423171
    Change-Id: I0e732358cff754ae9407ba6b1932bcbe1b1ce1b9

Changed in ceilometer:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in ceilometer:
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in ceilometer:
milestone: kilo-3 → 2015.1.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.