From 1e8b2b9b3a16f80e15ddac01cfb9a1adf20d5e24 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Thu, 25 Jul 2013 15:41:53 +0200 Subject: [PATCH] Remove MongoDB TTL support for MongoDB < 2.2 We already depends on MongoDB >= 2.2 Change-Id: I3d91fb08eb51ba6cfd5256abbeca43ed98321412 --- ceilometer/storage/impl_mongodb.py | 18 ---------- tests/storage/test_impl_mongodb.py | 57 ++++-------------------------- 2 files changed, 7 insertions(+), 68 deletions(-) diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index f45f7c0e7..057a29997 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -22,7 +22,6 @@ import calendar import copy -import datetime import operator import uuid import weakref @@ -34,7 +33,6 @@ import pymongo from oslo.config import cfg from ceilometer.openstack.common import log -from ceilometer.openstack.common import timeutils from ceilometer import storage from ceilometer.storage import base from ceilometer.storage import models @@ -287,11 +285,6 @@ class Connection(base.Connection): self.db.meter.ensure_index([('timestamp', pymongo.DESCENDING)], 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() ttl = cfg.CONF.database.time_to_live @@ -316,10 +309,6 @@ class Connection(base.Connection): 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): self.conn.drop_database(self.db) # Connection will be reopened automatically if needed @@ -377,13 +366,6 @@ class Connection(base.Connection): :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( key={}, condition={}, diff --git a/tests/storage/test_impl_mongodb.py b/tests/storage/test_impl_mongodb.py index d338bc4eb..f5a713142 100644 --- a/tests/storage/test_impl_mongodb.py +++ b/tests/storage/test_impl_mongodb.py @@ -102,55 +102,27 @@ class IndexTest(MongoDBEngineTestBase): # create a fake index and check it is deleted self.conn.db.meter.ensure_index('foo', name='meter_ttl') 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', name='meter_ttl')) 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', name='meter_ttl')) def test_meter_ttl_index_present(self): 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', name='meter_ttl')) self.assertEqual(self.conn.db.meter.index_information()[ 'meter_ttl']['expireAfterSeconds'], 456789) 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', 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): pass @@ -173,25 +145,10 @@ class MeterTestPagination(base.MeterTestPagination, 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): - # 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() - 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() + pass class StatisticsTest(base.StatisticsTest, MongoDBEngineTestBase):