Public bug reported:

If metering_time_to_live is left at its default (never expire data) and
later switched to a positive value, it will have no effect.  ceilometer
implements expiry by using a mongodb TTL index.  However, it does so
when there is already an existing index on the timestamp field:
https://pastebin.canonical.com/p/4vJNXQgDNM/

https://docs.mongodb.com/manual/core/index-ttl/ states "If a non-TTL
single-field index already exists for a field, you cannot create a TTL
index on the same field ... To change a non-TTL single-field index to a
TTL index, you must drop the index first and recreate with the
expireAfterSeconds option."

This index was added in the fix for lp:1193906; however those commits
did so without taking into account the TTL index.

In the default configuration of ceilometer and ceilometer-charm, this
isn't a problem, because data is never expired.  But because the manual
expiry of data is gated on whether TTL indexes are supported by the
mongodb version in use (see _is_natively_ttl_supported in
https://github.com/openstack/ceilometer/blob/e984f28b00e3a073c176f6435507f5bce1c82d30/ceilometer/storage/impl_mongodb.py),
positive TTLs can result in data not being expired correctly.

Ideally, the code should be updated to create a TTL index if it is
supported and a positive TTL is configured, and a non-TTL index if it is
not supported (mongodb versions before 2.2), or TTL is non-positive.

Because mongodb is a deprecated storage driver for ceilometer, this
isn't likely to be high priority or to be accepted by upstream, so I'll
document the workaround here:

- Check if there's a TTL index on mongodb:

myset:PRIMARY> use ceilometer
switched to db ceilometer
myset:PRIMARY> db.meter.getIndexes()
...

- If an index called "meter_ttl" is present, ceilometer has configured a
TTL index.  Drop the non-TTL index:

myset:PRIMARY> db.meter.dropIndex("timestamp_idx")

Unfortunately, there's no indication in the mongodb documentation as to
what will happen if "timestamp_idx" is recreated (which ceilometer seems
to do on connection to mongodb).  Hopefully the presence of the
"meter_ttl" index should prevent "timestamp_idx" from breaking an
existing TTL index, but I don't have any evidence to suggest one way or
the other yet.

** Affects: ceilometer (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1786146

Title:
  ceilometer meter_time_to_live has no effect if applied to existing
  mongodb database

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ceilometer/+bug/1786146/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to