Instance usage audit fails under PostgreSQL

Bug #1025481 reported by Mohammed Naser
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Fix Released
Undecided
Unassigned

Bug Description

The instance_usage_audit calls are not working when using PostgreSQL (not sure about other DB implementations) because SQLAlchemy sends it as a date when it expects a varchar.

Stacktrace:
2012-07-17 00:00:07 DEBUG nova.manager [-] Running periodic task ComputeManager._instance_usage_audit from (pid=6658) periodic_tasks /usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/manager.py:164
2012-07-17 00:00:07 ERROR nova.manager [-] Error during ComputeManager._instance_usage_audit: (ProgrammingError) operator does not exist: character varying = timestamp without time zone
LINE 3: ...stance_usage_audit' AND task_log.period_beginning = '2012-06...
                                                             ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
 'SELECT task_log.created_at AS task_log_created_at, task_log.updated_at AS task_log_updated_at, task_log.deleted_at AS task_log_deleted_at, task_log.deleted AS task_log_deleted, task_log.id AS task_log_id, task_log.task_name AS task_log_task_name, task_log.state AS task_log_state, task_log.host AS task_log_host, task_log.period_beginning AS task_log_period_beginning, task_log.period_ending AS task_log_period_ending, task_log.message AS task_log_message, task_log.task_items AS task_log_task_items, task_log.errors AS task_log_errors \nFROM task_log \nWHERE task_log.deleted = %(deleted_1)s AND task_log.task_name = %(task_name_1)s AND task_log.period_beginning = %(period_beginning_1)s AND task_log.period_ending = %(period_ending_1)s AND task_log.host = %(host_1)s \n LIMIT %(param_1)s' {'host_1': 'compute2', 'param_1': 1, 'deleted_1': False, 'period_ending_1': datetime.datetime(2012, 7, 1, 0, 0), 'task_name_1': 'instance_usage_audit', 'period_beginning_1': datetime.datetime(2012, 6, 1, 0, 0)}
2012-07-17 00:00:07 TRACE nova.manager Traceback (most recent call last):
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/manager.py", line 167, in periodic_tasks
2012-07-17 00:00:07 TRACE nova.manager task(self, context)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/compute/manager.py", line 2381, in _instance_usage_audit
2012-07-17 00:00:07 TRACE nova.manager if not compute_utils.has_audit_been_run(context, self.host):
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/compute/utils.py", line 116, in has_audit_been_run
2012-07-17 00:00:07 TRACE nova.manager begin, end, host)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/db/api.py", line 1879, in task_log_get
2012-07-17 00:00:07 TRACE nova.manager period_ending, host, state, session)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/db/sqlalchemy/api.py", line 114, in wrapper
2012-07-17 00:00:07 TRACE nova.manager return f(*args, **kwargs)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/nova-2012.2-py2.7.egg/nova/db/sqlalchemy/api.py", line 4971, in task_log_get
2012-07-17 00:00:07 TRACE nova.manager return query.first()
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2156, in first
2012-07-17 00:00:07 TRACE nova.manager ret = list(self[0:1])
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2023, in __getitem__
2012-07-17 00:00:07 TRACE nova.manager return list(res)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2227, in __iter__
2012-07-17 00:00:07 TRACE nova.manager return self._execute_and_instances(context)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2242, in _execute_and_instances
2012-07-17 00:00:07 TRACE nova.manager result = conn.execute(querycontext.statement, self._params)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1449, in execute
2012-07-17 00:00:07 TRACE nova.manager params)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1584, in _execute_clauseelement
2012-07-17 00:00:07 TRACE nova.manager compiled_sql, distilled_params
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1698, in _execute_context
2012-07-17 00:00:07 TRACE nova.manager context)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1691, in _execute_context
2012-07-17 00:00:07 TRACE nova.manager context)
2012-07-17 00:00:07 TRACE nova.manager File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 331, in do_execute
2012-07-17 00:00:07 TRACE nova.manager cursor.execute(statement, parameters)
2012-07-17 00:00:07 TRACE nova.manager ProgrammingError: (ProgrammingError) operator does not exist: character varying = timestamp without time zone
2012-07-17 00:00:07 TRACE nova.manager LINE 3: ...stance_usage_audit' AND task_log.period_beginning = '2012-06...
2012-07-17 00:00:07 TRACE nova.manager ^
2012-07-17 00:00:07 TRACE nova.manager HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
2012-07-17 00:00:07 TRACE nova.manager 'SELECT task_log.created_at AS task_log_created_at, task_log.updated_at AS task_log_updated_at, task_log.deleted_at AS task_log_deleted_at, task_log.deleted AS task_log_deleted, task_log.id AS task_log_id, task_log.task_name AS task_log_task_name, task_log.state AS task_log_state, task_log.host AS task_log_host, task_log.period_beginning AS task_log_period_beginning, task_log.period_ending AS task_log_period_ending, task_log.message AS task_log_message, task_log.task_items AS task_log_task_items, task_log.errors AS task_log_errors \nFROM task_log \nWHERE task_log.deleted = %(deleted_1)s AND task_log.task_name = %(task_name_1)s AND task_log.period_beginning = %(period_beginning_1)s AND task_log.period_ending = %(period_ending_1)s AND task_log.host = %(host_1)s \n LIMIT %(param_1)s' {'host_1': 'compute2', 'param_1': 1, 'deleted_1': False, 'period_ending_1': datetime.datetime(2012, 7, 1, 0, 0), 'task_name_1': 'instance_usage_audit', 'period_beginning_1': datetime.datetime(2012, 6, 1, 0, 0)}

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to nova (master)

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

Changed in nova:
assignee: nobody → Mohammed Naser (mnaser)
status: New → In Progress
Revision history for this message
Sean Dague (sdague) wrote :

The concensus from the reviews so far is that this should be handled by a migration that makes pgsl use a proper DateTime field.

https://review.openstack.org/#/c/9878

Revision history for this message
Thierry Carrez (ttx) wrote :

Looks like you're not working on that anymore. Please set back to InProgress and reassign to you if you're working on proposing a change for merging.

Changed in nova:
assignee: Mohammed Naser (mnaser) → nobody
status: In Progress → Triaged
Mohammed Naser (mnaser)
Changed in nova:
status: Triaged → Fix Released
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.