Remove MongoDB TTL support for MongoDB < 2.2

We already depends on MongoDB >= 2.2

Change-Id: I3d91fb08eb51ba6cfd5256abbeca43ed98321412
This commit is contained in:
Julien Danjou 2013-07-25 15:41:53 +02:00
parent 92bed7c1cc
commit 1e8b2b9b3a
2 changed files with 7 additions and 68 deletions

View File

@ -22,7 +22,6 @@
import calendar import calendar
import copy import copy
import datetime
import operator import operator
import uuid import uuid
import weakref import weakref
@ -34,7 +33,6 @@ import pymongo
from oslo.config import cfg from oslo.config import cfg
from ceilometer.openstack.common import log from ceilometer.openstack.common import log
from ceilometer.openstack.common import timeutils
from ceilometer import storage from ceilometer import storage
from ceilometer.storage import base from ceilometer.storage import base
from ceilometer.storage import models from ceilometer.storage import models
@ -287,11 +285,6 @@ class Connection(base.Connection):
self.db.meter.ensure_index([('timestamp', pymongo.DESCENDING)], self.db.meter.ensure_index([('timestamp', pymongo.DESCENDING)],
name='timestamp_idx') name='timestamp_idx')
# Since mongodb 2.2 support db-ttl natively
if self._is_natively_ttl_supported():
self._ensure_meter_ttl_index()
def _ensure_meter_ttl_index(self):
indexes = self.db.meter.index_information() indexes = self.db.meter.index_information()
ttl = cfg.CONF.database.time_to_live ttl = cfg.CONF.database.time_to_live
@ -316,10 +309,6 @@ class Connection(base.Connection):
name='meter_ttl' name='meter_ttl'
) )
def _is_natively_ttl_supported(self):
# Assume is not supported if we can get the version
return self.conn.server_info().get('versionArray', []) >= [2, 2]
def clear(self): def clear(self):
self.conn.drop_database(self.db) self.conn.drop_database(self.db)
# Connection will be reopened automatically if needed # Connection will be reopened automatically if needed
@ -377,13 +366,6 @@ class Connection(base.Connection):
:param ttl: Number of seconds to keep records for. :param ttl: Number of seconds to keep records for.
""" """
# Before mongodb 2.2 we need to clear expired data manually
if not self._is_natively_ttl_supported():
end = timeutils.utcnow() - datetime.timedelta(seconds=ttl)
f = storage.SampleFilter(end=end)
q = make_query_from_filter(f, require_meter=False)
self.db.meter.remove(q)
results = self.db.meter.group( results = self.db.meter.group(
key={}, key={},
condition={}, condition={},

View File

@ -102,55 +102,27 @@ class IndexTest(MongoDBEngineTestBase):
# create a fake index and check it is deleted # create a fake index and check it is deleted
self.conn.db.meter.ensure_index('foo', name='meter_ttl') self.conn.db.meter.ensure_index('foo', name='meter_ttl')
cfg.CONF.set_override('time_to_live', -1, group='database') cfg.CONF.set_override('time_to_live', -1, group='database')
self.conn.upgrade()
self.conn._ensure_meter_ttl_index()
self.assertTrue(self.conn.db.meter.ensure_index('foo', self.assertTrue(self.conn.db.meter.ensure_index('foo',
name='meter_ttl')) name='meter_ttl'))
cfg.CONF.set_override('time_to_live', 456789, group='database') cfg.CONF.set_override('time_to_live', 456789, group='database')
self.conn._ensure_meter_ttl_index() self.conn.upgrade()
self.assertFalse(self.conn.db.meter.ensure_index('foo', self.assertFalse(self.conn.db.meter.ensure_index('foo',
name='meter_ttl')) name='meter_ttl'))
def test_meter_ttl_index_present(self): def test_meter_ttl_index_present(self):
cfg.CONF.set_override('time_to_live', 456789, group='database') cfg.CONF.set_override('time_to_live', 456789, group='database')
self.conn._ensure_meter_ttl_index() self.conn.upgrade()
self.assertFalse(self.conn.db.meter.ensure_index('foo', self.assertFalse(self.conn.db.meter.ensure_index('foo',
name='meter_ttl')) name='meter_ttl'))
self.assertEqual(self.conn.db.meter.index_information()[ self.assertEqual(self.conn.db.meter.index_information()[
'meter_ttl']['expireAfterSeconds'], 456789) 'meter_ttl']['expireAfterSeconds'], 456789)
cfg.CONF.set_override('time_to_live', -1, group='database') cfg.CONF.set_override('time_to_live', -1, group='database')
self.conn._ensure_meter_ttl_index() self.conn.upgrade()
self.assertTrue(self.conn.db.meter.ensure_index('foo', self.assertTrue(self.conn.db.meter.ensure_index('foo',
name='meter_ttl')) name='meter_ttl'))
def test_ttl_index_is_supported(self):
self.mox.StubOutWithMock(self.conn.conn, "server_info")
self.conn.conn.server_info().AndReturn({'versionArray': [2, 4, 5, 0]})
self.mox.ReplayAll()
self.assertTrue(self.conn._is_natively_ttl_supported())
self.mox.UnsetStubs()
self.mox.VerifyAll()
def test_ttl_index_is_not_supported(self):
self.mox.StubOutWithMock(self.conn.conn, "server_info")
self.conn.conn.server_info().AndReturn({'versionArray': [2, 0, 1, 0]})
self.mox.ReplayAll()
self.assertFalse(self.conn._is_natively_ttl_supported())
self.mox.UnsetStubs()
self.mox.VerifyAll()
def test_ttl_index_is_unkown(self):
self.mox.StubOutWithMock(self.conn.conn, "server_info")
self.conn.conn.server_info().AndReturn({})
self.mox.ReplayAll()
self.assertFalse(self.conn._is_natively_ttl_supported())
self.mox.UnsetStubs()
self.mox.VerifyAll()
class UserTest(base.UserTest, MongoDBEngineTestBase): class UserTest(base.UserTest, MongoDBEngineTestBase):
pass pass
@ -173,25 +145,10 @@ class MeterTestPagination(base.MeterTestPagination, MongoDBEngineTestBase):
class RawSampleTest(base.RawSampleTest, MongoDBEngineTestBase): class RawSampleTest(base.RawSampleTest, MongoDBEngineTestBase):
# NOTE(jd) Override this test in MongoDB because our code doesn't clear
# the collections, this is handled by MongoDB TTL feature.
def test_clear_metering_data(self): def test_clear_metering_data(self):
# NOTE(sileht): ensure this tests is played for any version of mongo pass
self.mox.StubOutWithMock(self.conn, "_is_natively_ttl_supported")
self.conn._is_natively_ttl_supported().AndReturn(False)
self.mox.ReplayAll()
super(RawSampleTest, self).test_clear_metering_data()
self.mox.UnsetStubs()
self.mox.VerifyAll()
def test_clear_metering_data_no_data_to_remove(self):
# NOTE(sileht): ensure this tests is played for any version of mongo
self.mox.StubOutWithMock(self.conn, "_is_natively_ttl_supported")
self.conn._is_natively_ttl_supported().AndReturn(False)
self.mox.ReplayAll()
super(RawSampleTest, self).test_clear_metering_data_no_data_to_remove()
self.mox.UnsetStubs()
self.mox.VerifyAll()
class StatisticsTest(base.StatisticsTest, MongoDBEngineTestBase): class StatisticsTest(base.StatisticsTest, MongoDBEngineTestBase):