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.*'}
Fix proposed to branch: master /review. openstack. org/157334
Review: https:/