summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-11-12 20:41:16 +0000
committerGerrit Code Review <review@openstack.org>2015-11-12 20:41:16 +0000
commit31fddeb1e5f49ad8c51c0945af91d3c808f9ac73 (patch)
treed9c6ffb2940747f74a468266ae66f28e2a0208f7
parent7d206d69b1c0bfc70d9e9155896efd87052e786f (diff)
parent14586b2eac909dd76431e4eb9ff00b8f5a4c2d0c (diff)
downloadceilometer-31fddeb1e5f49ad8c51c0945af91d3c808f9ac73.tar.gz
Merge "avoid unnecessary inner join in get_resources() for SQL backend" into stable/kilo
-rw-r--r--ceilometer/storage/impl_sqlalchemy.py13
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)