diff options
author | gordon chung <gord@live.ca> | 2015-10-21 08:44:58 -0400 |
---|---|---|
committer | gordon chung <gord@live.ca> | 2015-10-21 08:44:58 -0400 |
commit | 898cd3d036c4358aa16f7b3e2028365dc9829213 (patch) | |
tree | c57c69b463f42a6713bdd5f9af825608572ab534 /ceilometer/event | |
parent | 15f44c6946753c3f11c27640cb991c8f806f726f (diff) | |
download | ceilometer-898cd3d036c4358aa16f7b3e2028365dc9829213.tar.gz |
avoid using isolation level
depending on sql driver, REPEATABLE READ isolation level may lock
an entire table and cause write timeouts. isolation level was set
originally to ensure consistent reads between 2 queries required to
build events. that said, we can avoid table locks by making
assumption that the 1st query is the correct base and any difference
given by 2nd query can be discarded.
Change-Id: Ic53e1addf38a4d5934b4e627c4c974c6db42517e
Closes-Bug: #1506717
Diffstat (limited to 'ceilometer/event')
-rw-r--r-- | ceilometer/event/storage/impl_sqlalchemy.py | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/ceilometer/event/storage/impl_sqlalchemy.py b/ceilometer/event/storage/impl_sqlalchemy.py index dd737331..b8d31fa1 100644 --- a/ceilometer/event/storage/impl_sqlalchemy.py +++ b/ceilometer/event/storage/impl_sqlalchemy.py @@ -131,10 +131,6 @@ class Connection(base.Connection): options = dict(cfg.CONF.database.items()) options['max_retries'] = 0 self._engine_facade = db_session.EngineFacade(url, **options) - if self._engine_facade.get_engine().name == 'sqlite': - self.isolation_level = 'SERIALIZABLE' - else: - self.isolation_level = 'REPEATABLE READ' def upgrade(self): # NOTE(gordc): to minimise memory, only import migration when needed @@ -216,9 +212,6 @@ class Connection(base.Connection): return session = self._engine_facade.get_session() with session.begin(): - session.connection( - execution_options={'isolation_level': self.isolation_level}) - # Build up the join conditions event_join_conditions = [models.EventType.id == models.Event.event_type_id] @@ -341,9 +334,11 @@ class Connection(base.Connection): trait_model = api_models.Trait(key, dtype, val) event_list[id_].append_trait(trait_model) except KeyError: - LOG.warning('Trait key: %(key)s, val: %(val)s, for event: ' - '%(event)s not valid.' % - {'key': key, 'val': val, 'event': id_}) + # NOTE(gordc): this is expected as we do not set REPEATABLE + # READ (bug 1506717). if query is run while recording new + # event data, trait query may return more data than event + # query. they can be safely discarded. + pass return event_list.values() |