diff options
-rw-r--r-- | ceilometer/event/storage/impl_sqlalchemy.py | 6 | ||||
-rw-r--r-- | ceilometer/tests/functional/storage/test_impl_sqlalchemy.py | 18 |
2 files changed, 16 insertions, 8 deletions
diff --git a/ceilometer/event/storage/impl_sqlalchemy.py b/ceilometer/event/storage/impl_sqlalchemy.py index 0a350188..fbf568db 100644 --- a/ceilometer/event/storage/impl_sqlalchemy.py +++ b/ceilometer/event/storage/impl_sqlalchemy.py @@ -163,15 +163,13 @@ class Connection(base.Connection): engine.execute(table.delete()) engine.dispose() - def _get_or_create_event_type(self, event_type, session=None): + def _get_or_create_event_type(self, event_type, session): """Check if an event type with the supplied name is already exists. If not, we create it and return the record. This may result in a flush. """ try: - if session is None: - session = self._engine_facade.get_session() - with session.begin(subtransactions=True): + with session.begin(nested=True): et = session.query(models.EventType).filter( models.EventType.desc == event_type).first() if not et: diff --git a/ceilometer/tests/functional/storage/test_impl_sqlalchemy.py b/ceilometer/tests/functional/storage/test_impl_sqlalchemy.py index 5854ba12..447842ea 100644 --- a/ceilometer/tests/functional/storage/test_impl_sqlalchemy.py +++ b/ceilometer/tests/functional/storage/test_impl_sqlalchemy.py @@ -63,22 +63,32 @@ class EventTypeTest(tests_db.TestBase): # EventType is a construct specific to sqlalchemy # Not applicable to other drivers. + def setUp(self): + super(EventTypeTest, self).setUp() + self.session = self.conn._engine_facade.get_session() + self.session.begin() + def test_event_type_exists(self): - et1 = self.event_conn._get_or_create_event_type("foo") + et1 = self.event_conn._get_or_create_event_type("foo", self.session) self.assertTrue(et1.id >= 0) - et2 = self.event_conn._get_or_create_event_type("foo") + et2 = self.event_conn._get_or_create_event_type("foo", self.session) self.assertEqual(et2.id, et1.id) self.assertEqual(et2.desc, et1.desc) def test_event_type_unique(self): - et1 = self.event_conn._get_or_create_event_type("foo") + et1 = self.event_conn._get_or_create_event_type("foo", self.session) self.assertTrue(et1.id >= 0) - et2 = self.event_conn._get_or_create_event_type("blah") + et2 = self.event_conn._get_or_create_event_type("blah", self.session) self.assertNotEqual(et1.id, et2.id) self.assertNotEqual(et1.desc, et2.desc) # Test the method __repr__ returns a string self.assertTrue(reprlib.repr(et2)) + def tearDown(self): + self.session.rollback() + self.session.close() + super(EventTypeTest, self).tearDown() + @tests_db.run_with('sqlite', 'mysql', 'pgsql') class EventTest(tests_db.TestBase): |