summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ceilometer/event/storage/impl_sqlalchemy.py6
-rw-r--r--ceilometer/tests/functional/storage/test_impl_sqlalchemy.py18
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):