ceilometer-expirer don't check if time to live is enabled before starting the database cleanup

Bug #1270760 reported by Mehdi Abaakouk
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Ceilometer
Fix Released
High
Mehdi Abaakouk

Bug Description

Hi,

ceilometer-expirer doesn't check if time to live is enabled before starting the database cleanup

For mongodb/mysql backend, the result is that mongo/mysql start the database cleanup operation/requests that doesn't delete anything.

ceilometer-expirer must check that the time to live is greater as 0 before start the backend operation.

Cheers,

Mehdi Abaakouk (sileht)
Changed in ceilometer:
assignee: nobody → Mehdi Abaakouk (sileht)
status: New → Confirmed
description: updated
Julien Danjou (jdanjou)
Changed in ceilometer:
importance: Undecided → High
milestone: none → icehouse-2
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/67803

Changed in ceilometer:
status: Confirmed → In Progress
Thierry Carrez (ttx)
Changed in ceilometer:
milestone: icehouse-2 → icehouse-3
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to ceilometer (master)

Reviewed: https://review.openstack.org/67803
Committed: https://git.openstack.org/cgit/openstack/ceilometer/commit/?id=20019f8f4b808d47cd22a9bfdac7dbc91cc0935a
Submitter: Jenkins
Branch: master

commit 20019f8f4b808d47cd22a9bfdac7dbc91cc0935a
Author: Mehdi Abaakouk <email address hidden>
Date: Mon Jan 20 11:29:57 2014 +0100

    Exit expirer earlier if db-ttl is disabled

    Now, the ceilometer-expirer exit without doing the backend db request if
    the db-ttl is disabled.

    Fixes bug #1270760

    Change-Id: I49580be14cd932317ff30070aeec391ef456712e

Changed in ceilometer:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in ceilometer:
status: Fix Committed → Fix Released
Revision history for this message
ZhiQiang Fan (aji-zqfan) wrote :
Download full text (3.2 KiB)

I think this bug is havana backport potential, because

in https://github.com/openstack/ceilometer/blob/stable/havana/ceilometer/storage/impl_sqlalchemy.py#L242:

        query = session.query(Meter.id)
        end = timeutils.utcnow() - datetime.timedelta(seconds=ttl)
        query = query.filter(Meter.timestamp < end)
        query.delete()

and python datetime will handle ttl = -1 as:

>>> import datetime
>>> d1 = datetime.datetime.utcnow()
>>> d1
datetime.datetime(2014, 3, 28, 6, 52, 37, 686339)
>>> d1 - datetime.timedelta(seconds=-1)
datetime.datetime(2014, 3, 28, 6, 52, 38, 686339)

in such case, if ttl = -1 and user uses mysql as backend then accidently executes the ceilometer-expire
everything will disappear

mysql> select count(*) from meter;
+----------+
| count(*) |
+----------+
| 228 |
+----------+

but it trigger another error,
# ceilometer-expire --config-file /etc/ceilometer/ceilometer.conf
2014-03-28 15:01:54.268 22540 CRITICAL ceilometer [-] (IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`ceilometer`.`sourceassoc`, CONSTRAINT `fk_sourceassoc_meter_id` FOREIGN KEY (`meter_id`) REFERENCES `meter` (`id`))') 'DELETE FROM meter WHERE meter.timestamp < %s' (Decimal('1395990114.767705'),)
2014-03-28 15:01:54.268 22540 TRACE ceilometer Traceback (most recent call last):
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/bin/ceilometer-expirer", line 10, in <module>
2014-03-28 15:01:54.268 22540 TRACE ceilometer sys.exit(expirer())
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/lib/python2.7/dist-packages/ceilometer/storage/__init__.py", line 147, in expirer
2014-03-28 15:01:54.268 22540 TRACE ceilometer cfg.CONF.database.time_to_live)
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/lib/python2.7/dist-packages/ceilometer/storage/impl_sqlalchemy.py", line 244, in clear_expired_metering_data
2014-03-28 15:01:54.268 22540 TRACE ceilometer query.delete()
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2581, in delete
2014-03-28 15:01:54.268 22540 TRACE ceilometer delete_op.exec_()
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 816, in exec_
2014-03-28 15:01:54.268 22540 TRACE ceilometer self._do_exec()
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 942, in _do_exec
2014-03-28 15:01:54.268 22540 TRACE ceilometer params=self.query._params)
2014-03-28 15:01:54.268 22540 TRACE ceilometer File "/usr/lib/python2.7/dist-packages/ceilometer/openstack/common/db/sqlalchemy/session.py", line 540, in _wrap
2014-03-28 15:01:54.268 22540 TRACE ceilometer raise exception.DBError(e)
2014-03-28 15:01:54.268 22540 TRACE ceilometer DBError: (IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`ceilometer`.`sourceassoc`, CONSTRAINT `fk_sourceassoc_meter_id` FOREIGN KEY (`meter_id`) REFERENCES `meter` (`id`))') 'DELETE FROM meter WHERE meter.timestamp < %s' (Decimal('1395990114.7...

Read more...

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to ceilometer (stable/havana)

Fix proposed to branch: stable/havana
Review: https://review.openstack.org/84216

Thierry Carrez (ttx)
Changed in ceilometer:
milestone: icehouse-3 → 2014.1
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Change abandoned on ceilometer (stable/havana)

Change abandoned by ZhiQiang Fan (<email address hidden>) on branch: stable/havana
Review: https://review.openstack.org/84216
Reason: not security related

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.