diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-11-12 20:41:16 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-11-12 20:41:16 +0000 |
commit | 31fddeb1e5f49ad8c51c0945af91d3c808f9ac73 (patch) | |
tree | d9c6ffb2940747f74a468266ae66f28e2a0208f7 | |
parent | 7d206d69b1c0bfc70d9e9155896efd87052e786f (diff) | |
parent | 14586b2eac909dd76431e4eb9ff00b8f5a4c2d0c (diff) | |
download | ceilometer-31fddeb1e5f49ad8c51c0945af91d3c808f9ac73.tar.gz |
Merge "avoid unnecessary inner join in get_resources() for SQL backend" into stable/kilo
-rw-r--r-- | ceilometer/storage/impl_sqlalchemy.py | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py index 9eea27e6..09f6cc67 100644 --- a/ceilometer/storage/impl_sqlalchemy.py +++ b/ceilometer/storage/impl_sqlalchemy.py @@ -432,9 +432,16 @@ class Connection(base.Connection): session = self._engine_facade.get_session() # get list of resource_ids - res_q = session.query(distinct(models.Resource.resource_id)).join( - models.Sample, - models.Sample.resource_id == models.Resource.internal_id) + has_timestamp = start_timestamp or end_timestamp + # NOTE: When sql_expire_samples_only is enabled, there will be some + # resources without any sample, in such case we should use inner + # join on sample table to avoid wrong result. + if cfg.CONF.sql_expire_samples_only or has_timestamp: + res_q = session.query(distinct(models.Resource.resource_id)).join( + models.Sample, + models.Sample.resource_id == models.Resource.internal_id) + else: + res_q = session.query(distinct(models.Resource.resource_id)) res_q = make_query_from_filter(session, res_q, s_filter, require_meter=False) |