i see this occasionally.
with a new database, starting devstack with (pipeline polling at 20sec):
/opt/stack/ceilometer/ceilometer/openstack/common/db/sqlalchemy/session.py:521: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
m = re.match(operational_error.message)
2013-12-04 15:51:44.522 1198 ERROR ceilometer.dispatcher.database [req-6c0f023d-abde-4c31-9ae9-d951a24930f9 admin None] Failed to record metering data: (OperationalError) (1213, 'Deadlock found when trying to get lock; try restarting transaction') 'UPDATE resource SET resource_metadata=%s, user_id=%s, project_id=%s WHERE resource.id = %s' (None, None, '903b138b3ae54e6794e51568ef7ae1ad', '903b138b3ae54e6794e51568ef7ae1ad')
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database Traceback (most recent call last):
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database File "/opt/stack/ceilometer/ceilometer/dispatcher/database.py", line 67, in record_metering_data
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database self.storage_conn.record_metering_data(meter)
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database File "/opt/stack/ceilometer/ceilometer/storage/impl_sqlalchemy.py", line 259, in record_metering_data
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database session.flush()
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database File "/opt/stack/ceilometer/ceilometer/openstack/common/db/sqlalchemy/session.py", line 538, in _wrap
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database _raise_if_deadlock_error(e, get_engine().name)
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database File "/opt/stack/ceilometer/ceilometer/openstack/common/db/sqlalchemy/session.py", line 524, in _raise_if_deadlock_error
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database raise exception.DBDeadlock(operational_error)
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database DBDeadlock: (OperationalError) (1213, 'Deadlock found when trying to get lock; try restarting transaction') 'UPDATE resource SET resource_metadata=%s, user_id=%s, project_id=%s WHERE resource.id = %s' (None, None, '903b138b3ae54e6794e51568ef7ae1ad', '903b138b3ae54e6794e51568ef7ae1ad')
2013-12-04 15:51:44.522 1198 TRACE ceilometer.dispatcher.database
/opt/stack/ceilometer/ceilometer/openstack/common/db/sqlalchemy/session.py:484: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
m = _DUP_KEY_RE_DB[engine_name].match(integrity_error.message)
/opt/stack/ceilometer/ceilometer/openstack/common/db/sqlalchemy/session.py:484: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
m = _DUP_KEY_RE_DB[engine_name].match(integrity_error.message)
related to _create_or_update code. while the creation of value is concurrent safe, the update part of code allows for multiple updates against source, and other kwargs fields.... it begs the question, should we really even have source value in user/project tables and source/ user/project/ metadata values in resource table when they are redundant info stored in Meter record