From 1dfb2cb44b9b81133f75e1c9e8622306a14a7bb0 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Mon, 25 May 2015 17:08:58 +0200 Subject: [PATCH] Remove pagination code This code is actually dead code we carry over for a long time now, as the pagination support never landed completely. Let's clean that old cruft. Change-Id: Idbb2c93ed00dc2359f555d245c2283844d5a1da4 --- ceilometer/alarm/storage/base.py | 3 +- ceilometer/alarm/storage/impl_hbase.py | 4 +- ceilometer/alarm/storage/impl_log.py | 2 +- ceilometer/alarm/storage/impl_sqlalchemy.py | 7 +- ceilometer/alarm/storage/pymongo_base.py | 7 +- ceilometer/api/controllers/v2/alarms.py | 2 - ceilometer/api/controllers/v2/capabilities.py | 12 +- ceilometer/storage/base.py | 41 +----- ceilometer/storage/impl_db2.py | 6 +- ceilometer/storage/impl_hbase.py | 12 +- ceilometer/storage/impl_log.py | 6 +- ceilometer/storage/impl_mongodb.py | 80 +---------- ceilometer/storage/impl_sqlalchemy.py | 16 +-- ceilometer/storage/pymongo_base.py | 7 +- ceilometer/tests/api/v2/test_query.py | 6 +- .../tests/gabbi/gabbits/capabilities.yaml | 1 - ceilometer/tests/storage/test_impl_db2.py | 12 +- ceilometer/tests/storage/test_impl_hbase.py | 12 +- ceilometer/tests/storage/test_impl_mongodb.py | 75 +--------- .../tests/storage/test_impl_sqlalchemy.py | 12 +- .../tests/storage/test_storage_scenarios.py | 136 ------------------ 21 files changed, 44 insertions(+), 415 deletions(-) diff --git a/ceilometer/alarm/storage/base.py b/ceilometer/alarm/storage/base.py index f1735c9b7e..e331f2573c 100644 --- a/ceilometer/alarm/storage/base.py +++ b/ceilometer/alarm/storage/base.py @@ -41,7 +41,7 @@ class Connection(object): @staticmethod def get_alarms(name=None, user=None, state=None, meter=None, - project=None, enabled=None, alarm_id=None, pagination=None, + project=None, enabled=None, alarm_id=None, alarm_type=None, severity=None): """Yields a lists of alarms that match filters. @@ -52,7 +52,6 @@ class Connection(object): :param project: Optional ID for project that owns the resource. :param enabled: Optional boolean to list disable alarm. :param alarm_id: Optional alarm_id to return one alarm. - :param pagination: Optional pagination query. :param alarm_type: Optional alarm type. :parmr severity: Optional alarm severity """ diff --git a/ceilometer/alarm/storage/impl_hbase.py b/ceilometer/alarm/storage/impl_hbase.py index 7b0d43929e..c3110a22ac 100644 --- a/ceilometer/alarm/storage/impl_hbase.py +++ b/ceilometer/alarm/storage/impl_hbase.py @@ -119,11 +119,9 @@ class Connection(hbase_base.Connection, base.Connection): alarm_table.delete(alarm_id) def get_alarms(self, name=None, user=None, state=None, meter=None, - project=None, enabled=None, alarm_id=None, pagination=None, + project=None, enabled=None, alarm_id=None, alarm_type=None, severity=None): - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') if meter: raise ceilometer.NotImplementedError( 'Filter by meter not implemented') diff --git a/ceilometer/alarm/storage/impl_log.py b/ceilometer/alarm/storage/impl_log.py index e427eda13e..3660415b5e 100644 --- a/ceilometer/alarm/storage/impl_log.py +++ b/ceilometer/alarm/storage/impl_log.py @@ -32,7 +32,7 @@ class Connection(base.Connection): pass def get_alarms(self, name=None, user=None, state=None, meter=None, - project=None, enabled=None, alarm_id=None, pagination=None, + project=None, enabled=None, alarm_id=None, alarm_type=None, severity=None): """Yields a lists of alarms that match filters.""" return [] diff --git a/ceilometer/alarm/storage/impl_sqlalchemy.py b/ceilometer/alarm/storage/impl_sqlalchemy.py index 0871dc8711..50afa53963 100644 --- a/ceilometer/alarm/storage/impl_sqlalchemy.py +++ b/ceilometer/alarm/storage/impl_sqlalchemy.py @@ -21,7 +21,6 @@ from oslo_db.sqlalchemy import session as db_session from oslo_utils import timeutils from sqlalchemy import desc -import ceilometer from ceilometer.alarm.storage import base from ceilometer.alarm.storage import models as alarm_api_models from ceilometer.i18n import _LI @@ -147,7 +146,7 @@ class Connection(base.Connection): return (self._row_to_alarm_model(x) for x in query.all()) def get_alarms(self, name=None, user=None, state=None, meter=None, - project=None, enabled=None, alarm_id=None, pagination=None, + project=None, enabled=None, alarm_id=None, alarm_type=None, severity=None): """Yields a lists of alarms that match filters. @@ -158,14 +157,10 @@ class Connection(base.Connection): :param project: Optional ID for project that owns the resource. :param enabled: Optional boolean to list disable alarm. :param alarm_id: Optional alarm_id to return one alarm. - :param pagination: Optional pagination query. :param alarm_type: Optional alarm type. :param severity: Optional alarm severity """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - session = self._engine_facade.get_session() query = session.query(models.Alarm) if name is not None: diff --git a/ceilometer/alarm/storage/pymongo_base.py b/ceilometer/alarm/storage/pymongo_base.py index c097ac1daf..93e822607d 100644 --- a/ceilometer/alarm/storage/pymongo_base.py +++ b/ceilometer/alarm/storage/pymongo_base.py @@ -21,7 +21,6 @@ import pymongo -import ceilometer from ceilometer.alarm.storage import base from ceilometer.alarm.storage import models from ceilometer.openstack.common import log @@ -80,7 +79,7 @@ class Connection(base.Connection): self.db.alarm_history.insert(alarm_change.copy()) def get_alarms(self, name=None, user=None, state=None, meter=None, - project=None, enabled=None, alarm_id=None, pagination=None, + project=None, enabled=None, alarm_id=None, alarm_type=None, severity=None): """Yields a lists of alarms that match filters. @@ -91,13 +90,9 @@ class Connection(base.Connection): :param project: Optional ID for project that owns the resource. :param enabled: Optional boolean to list disable alarm. :param alarm_id: Optional alarm_id to return one alarm. - :param pagination: Optional pagination query. :param alarm_type: Optional alarm type. :param severity: Optional alarm severity. """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - q = {} if user is not None: q['user_id'] = user diff --git a/ceilometer/api/controllers/v2/alarms.py b/ceilometer/api/controllers/v2/alarms.py index d86f1947bc..3770446369 100644 --- a/ceilometer/api/controllers/v2/alarms.py +++ b/ceilometer/api/controllers/v2/alarms.py @@ -563,8 +563,6 @@ class AlarmController(rest.RestController): timeutils.utcnow(), type=alarm_models.AlarmChange.DELETION) - # TODO(eglynn): add pagination marker to signature once overall - # API support for pagination is finalized @wsme_pecan.wsexpose([AlarmChange], [base.Query]) def history(self, q=None): """Assembles the alarm history requested. diff --git a/ceilometer/api/controllers/v2/capabilities.py b/ceilometer/api/controllers/v2/capabilities.py index 9e696f6330..85da8e5733 100644 --- a/ceilometer/api/controllers/v2/capabilities.py +++ b/ceilometer/api/controllers/v2/capabilities.py @@ -50,20 +50,16 @@ class Capabilities(base.Base): def sample(cls): return cls( api=_flatten_capabilities({ - 'meters': {'pagination': True, - 'query': {'simple': True, + 'meters': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'resources': {'pagination': False, - 'query': {'simple': True, + 'resources': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'samples': {'pagination': True, - 'query': {'simple': True, + 'samples': {'query': {'simple': True, 'metadata': True, 'complex': True}}, - 'statistics': {'pagination': True, - 'groupby': True, + 'statistics': {'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, diff --git a/ceilometer/storage/base.py b/ceilometer/storage/base.py index 93b4b42374..ea9adc4b73 100644 --- a/ceilometer/storage/base.py +++ b/ceilometer/storage/base.py @@ -80,29 +80,6 @@ class NoResultFound(Exception): pass -class Pagination(object): - """Class for pagination query.""" - - def __init__(self, limit=None, primary_sort_dir='desc', sort_keys=None, - sort_dirs=None, marker_value=None): - """This puts all parameters used for paginate query together. - - :param limit: Maximum number of items to return; - :param primary_sort_dir: Sort direction of primary key. - :param marker_value: Value of primary key to identify the last item of - the previous page. - :param sort_keys: Array of attributes passed in by users to sort the - results besides the primary key. - :param sort_dirs: Per-column array of sort_dirs, corresponding to - sort_keys. - """ - self.limit = limit - self.primary_sort_dir = primary_sort_dir - self.marker_value = marker_value - self.sort_keys = sort_keys or [] - self.sort_dirs = sort_dirs or [] - - class Model(object): """Base class for storage API models.""" @@ -136,20 +113,16 @@ class Connection(object): # A dictionary representing the capabilities of this driver. CAPABILITIES = { - 'meters': {'pagination': False, - 'query': {'simple': False, + 'meters': {'query': {'simple': False, 'metadata': False, 'complex': False}}, - 'resources': {'pagination': False, - 'query': {'simple': False, + 'resources': {'query': {'simple': False, 'metadata': False, 'complex': False}}, - 'samples': {'pagination': False, - 'query': {'simple': False, + 'samples': {'query': {'simple': False, 'metadata': False, 'complex': False}}, - 'statistics': {'pagination': False, - 'groupby': False, + 'statistics': {'groupby': False, 'query': {'simple': False, 'metadata': False, 'complex': False}, @@ -203,7 +176,7 @@ class Connection(object): def get_resources(user=None, project=None, source=None, start_timestamp=None, start_timestamp_op=None, end_timestamp=None, end_timestamp_op=None, - metaquery=None, resource=None, pagination=None): + metaquery=None, resource=None): """Return an iterable of models.Resource instances. Iterable items containing resource information. @@ -216,13 +189,12 @@ class Connection(object): :param end_timestamp_op: Optional timestamp end range operation. :param metaquery: Optional dict with metadata to match on. :param resource: Optional resource filter. - :param pagination: Optional pagination query. """ raise ceilometer.NotImplementedError('Resources not implemented') @staticmethod def get_meters(user=None, project=None, resource=None, source=None, - metaquery=None, pagination=None): + metaquery=None): """Return an iterable of model.Meter instances. Iterable items containing meter information. @@ -231,7 +203,6 @@ class Connection(object): :param resource: Optional resource filter. :param source: Optional source filter. :param metaquery: Optional dict with metadata to match on. - :param pagination: Optional pagination query. """ raise ceilometer.NotImplementedError('Meters not implemented') diff --git a/ceilometer/storage/impl_db2.py b/ceilometer/storage/impl_db2.py index 1996db999f..06a6463194 100644 --- a/ceilometer/storage/impl_db2.py +++ b/ceilometer/storage/impl_db2.py @@ -256,7 +256,7 @@ class Connection(pymongo_base.Connection): def get_resources(self, user=None, project=None, source=None, start_timestamp=None, start_timestamp_op=None, end_timestamp=None, end_timestamp_op=None, - metaquery=None, resource=None, pagination=None): + metaquery=None, resource=None): """Return an iterable of models.Resource instances :param user: Optional ID for user that owns the resource. @@ -268,11 +268,7 @@ class Connection(pymongo_base.Connection): :param end_timestamp_op: Optional end time operator, like lt, le. :param metaquery: Optional dict with metadata to match on. :param resource: Optional resource filter. - :param pagination: Optional pagination query. """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - metaquery = pymongo_utils.improve_keys(metaquery, metaquery=True) or {} q = {} diff --git a/ceilometer/storage/impl_hbase.py b/ceilometer/storage/impl_hbase.py index 16e63f5776..af3ca59b63 100644 --- a/ceilometer/storage/impl_hbase.py +++ b/ceilometer/storage/impl_hbase.py @@ -186,7 +186,7 @@ class Connection(hbase_base.Connection, base.Connection): def get_resources(self, user=None, project=None, source=None, start_timestamp=None, start_timestamp_op=None, end_timestamp=None, end_timestamp_op=None, - metaquery=None, resource=None, pagination=None): + metaquery=None, resource=None): """Return an iterable of models.Resource instances :param user: Optional ID for user that owns the resource. @@ -198,11 +198,7 @@ class Connection(hbase_base.Connection, base.Connection): :param end_timestamp_op: Optional end time operator, like lt, le. :param metaquery: Optional dict with metadata to match on. :param resource: Optional resource filter. - :param pagination: Optional pagination query. """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - q = hbase_utils.make_query(metaquery=metaquery, user_id=user, project_id=project, resource_id=resource, source=source) @@ -242,7 +238,7 @@ class Connection(hbase_base.Connection, base.Connection): metadata=md) def get_meters(self, user=None, project=None, resource=None, source=None, - metaquery=None, pagination=None): + metaquery=None): """Return an iterable of models.Meter instances :param user: Optional ID for user that owns the resource. @@ -250,14 +246,10 @@ class Connection(hbase_base.Connection, base.Connection): :param resource: Optional resource filter. :param source: Optional source filter. :param metaquery: Optional dict with metadata to match on. - :param pagination: Optional pagination query. """ metaquery = metaquery or {} - if pagination: - raise ceilometer.NotImplementedError( - _('Pagination not implemented')) with self.conn_pool.connection() as conn: resource_table = conn.table(self.RESOURCE_TABLE) q = hbase_utils.make_query(metaquery=metaquery, user_id=user, diff --git a/ceilometer/storage/impl_log.py b/ceilometer/storage/impl_log.py index b86ef14076..8fcf390d8c 100644 --- a/ceilometer/storage/impl_log.py +++ b/ceilometer/storage/impl_log.py @@ -54,7 +54,7 @@ class Connection(base.Connection): def get_resources(self, user=None, project=None, source=None, start_timestamp=None, start_timestamp_op=None, end_timestamp=None, end_timestamp_op=None, - metaquery=None, resource=None, pagination=None): + metaquery=None, resource=None): """Return an iterable of dictionaries containing resource information. { 'resource_id': UUID of the resource, @@ -74,12 +74,11 @@ class Connection(base.Connection): :param end_timestamp_op: Optional end time operator, like lt, le. :param metaquery: Optional dict with metadata to match on. :param resource: Optional resource filter. - :param pagination: Optional pagination query. """ return [] def get_meters(self, user=None, project=None, resource=None, source=None, - limit=None, metaquery=None, pagination=None): + limit=None, metaquery=None): """Return an iterable of dictionaries containing meter information. { 'name': name of the meter, @@ -95,7 +94,6 @@ class Connection(base.Connection): :param source: Optional source filter. :param limit: Maximum number of results to return. :param metaquery: Optional dict with metadata to match on. - :param pagination: Optional pagination query. """ return [] diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index 557f8e226a..4d42c90924 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -592,47 +592,6 @@ class Connection(pymongo_base.Connection): criteria_cmp = cls._recurse_sort_keys(sort_keys[1:], marker, flag) return dict(criteria_equ, ** criteria_cmp) - @classmethod - def _build_paginate_query(cls, marker, sort_keys=None, sort_dir='desc'): - """Returns a query with sorting / pagination. - - Pagination works by requiring sort_key and sort_dir. - We use the last item in previous page as the 'marker' for pagination. - So we return values that follow the passed marker in the order. - :param q: The query dict passed in. - :param marker: the last item of the previous page; we return the next - results after this item. - :param sort_keys: array of attributes by which results be sorted. - :param sort_dir: direction in which results be sorted (asc, desc). - :return: sort parameters, query to use - """ - all_sort = [] - sort_keys = sort_keys or [] - all_sort, _op = cls._build_sort_instructions(sort_keys, sort_dir) - - if marker is not None: - sort_criteria_list = [] - - for i in range(len(sort_keys)): - # NOTE(fengqian): Generate the query criteria recursively. - # sort_keys=[k1, k2, k3], maker_value=[v1, v2, v3] - # sort_flags = ['$lt', '$gt', 'lt']. - # The query criteria should be - # {'k3': {'$lt': 'v3'}, 'k2': {'eq': 'v2'}, 'k1': - # {'eq': 'v1'}}, - # {'k2': {'$gt': 'v2'}, 'k1': {'eq': 'v1'}}, - # {'k1': {'$lt': 'v1'}} with 'OR' operation. - # Each recurse will generate one items of three. - sort_criteria_list.append(cls._recurse_sort_keys( - sort_keys[:(len(sort_keys) - i)], - marker, _op)) - - metaquery = {"$or": sort_criteria_list} - else: - metaquery = {} - - return all_sort, metaquery - @classmethod def _build_sort_instructions(cls, sort_keys=None, sort_dir='desc'): """Returns a sort_instruction and paging operator. @@ -655,39 +614,6 @@ class Connection(pymongo_base.Connection): return sort_instructions, operation - @classmethod - def paginate_query(cls, q, db_collection, limit=None, marker=None, - sort_keys=None, sort_dir='desc'): - """Returns a query result with sorting / pagination. - - Pagination works by requiring sort_key and sort_dir. - We use the last item in previous page as the 'marker' for pagination. - So we return values that follow the passed marker in the order. - - :param q: the query dict passed in. - :param db_collection: Database collection that be query. - :param limit: maximum number of items to return. - :param marker: the last item of the previous page; we return the next - results after this item. - :param sort_keys: array of attributes by which results be sorted. - :param sort_dir: direction in which results be sorted (asc, desc). - - :return: The query with sorting/pagination added. - """ - - sort_keys = sort_keys or [] - all_sort, query = cls._build_paginate_query(marker, - sort_keys, - sort_dir) - q.update(query) - - # NOTE(Fengqian): MongoDB collection.find can not handle limit - # when it equals None, it will raise TypeError, so we treat - # None as 0 for the value of limit. - if limit is None: - limit = 0 - return db_collection.find(q, limit=limit, sort=all_sort) - def _get_time_constrained_resources(self, query, start_timestamp, start_timestamp_op, end_timestamp, end_timestamp_op, @@ -785,7 +711,7 @@ class Connection(pymongo_base.Connection): def get_resources(self, user=None, project=None, source=None, start_timestamp=None, start_timestamp_op=None, end_timestamp=None, end_timestamp_op=None, - metaquery=None, resource=None, pagination=None): + metaquery=None, resource=None): """Return an iterable of models.Resource instances :param user: Optional ID for user that owns the resource. @@ -797,11 +723,7 @@ class Connection(pymongo_base.Connection): :param end_timestamp_op: Optional end time operator, like lt, le. :param metaquery: Optional dict with metadata to match on. :param resource: Optional resource filter. - :param pagination: Optional pagination query. """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - metaquery = pymongo_utils.improve_keys(metaquery, metaquery=True) or {} query = {} diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py index 845d1e9152..b948ae7576 100644 --- a/ceilometer/storage/impl_sqlalchemy.py +++ b/ceilometer/storage/impl_sqlalchemy.py @@ -72,8 +72,7 @@ AVAILABLE_CAPABILITIES = { 'metadata': True}}, 'resources': {'query': {'simple': True, 'metadata': True}}, - 'samples': {'pagination': True, - 'query': {'simple': True, + 'samples': {'query': {'simple': True, 'metadata': True, 'complex': True}}, 'statistics': {'groupby': True, @@ -386,7 +385,7 @@ class Connection(base.Connection): def get_resources(self, user=None, project=None, source=None, start_timestamp=None, start_timestamp_op=None, end_timestamp=None, end_timestamp_op=None, - metaquery=None, resource=None, pagination=None): + metaquery=None, resource=None): """Return an iterable of api_models.Resource instances :param user: Optional ID for user that owns the resource. @@ -398,11 +397,7 @@ class Connection(base.Connection): :param end_timestamp_op: Optional end time operator, like lt, le. :param metaquery: Optional dict with metadata to match on. :param resource: Optional resource filter. - :param pagination: Optional pagination query. """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - s_filter = storage.SampleFilter(user=user, project=project, source=source, @@ -467,7 +462,7 @@ class Connection(base.Connection): ) def get_meters(self, user=None, project=None, resource=None, source=None, - metaquery=None, pagination=None): + metaquery=None): """Return an iterable of api_models.Meter instances :param user: Optional ID for user that owns the resource. @@ -475,12 +470,7 @@ class Connection(base.Connection): :param resource: Optional ID of the resource. :param source: Optional source filter. :param metaquery: Optional dict with metadata to match on. - :param pagination: Optional pagination query. """ - - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - s_filter = storage.SampleFilter(user=user, project=project, source=source, diff --git a/ceilometer/storage/pymongo_base.py b/ceilometer/storage/pymongo_base.py index 3543327a7b..19f581f646 100644 --- a/ceilometer/storage/pymongo_base.py +++ b/ceilometer/storage/pymongo_base.py @@ -19,7 +19,6 @@ """ import pymongo -import ceilometer from ceilometer.storage import base from ceilometer.storage import models from ceilometer.storage.mongo import utils as pymongo_utils @@ -51,7 +50,7 @@ class Connection(base.Connection): ) def get_meters(self, user=None, project=None, resource=None, source=None, - metaquery=None, pagination=None): + metaquery=None): """Return an iterable of models.Meter instances :param user: Optional ID for user that owns the resource. @@ -59,12 +58,8 @@ class Connection(base.Connection): :param resource: Optional resource filter. :param source: Optional source filter. :param metaquery: Optional dict with metadata to match on. - :param pagination: Optional pagination query. """ - if pagination: - raise ceilometer.NotImplementedError('Pagination not implemented') - metaquery = pymongo_utils.improve_keys(metaquery, metaquery=True) or {} q = {} diff --git a/ceilometer/tests/api/v2/test_query.py b/ceilometer/tests/api/v2/test_query.py index 5f7b023772..8d8b83035d 100644 --- a/ceilometer/tests/api/v2/test_query.py +++ b/ceilometer/tests/api/v2/test_query.py @@ -381,7 +381,7 @@ class TestQueryToKwArgs(tests_base.BaseTestCase): exc = self.assertRaises( wsme.exc.UnknownArgument, utils.query_to_kwargs, q, storage_base.Connection.get_meters) - valid_keys = ['pagination', 'project', 'resource', 'source', 'user'] + valid_keys = ['project', 'resource', 'source', 'user'] msg = ("unrecognized field in query: %s, " "valid keys: %s") % (q, valid_keys) expected_exc = wsme.exc.UnknownArgument('abc', msg) @@ -394,7 +394,7 @@ class TestQueryToKwArgs(tests_base.BaseTestCase): exc = self.assertRaises( wsme.exc.UnknownArgument, utils.query_to_kwargs, q, storage_base.Connection.get_resources) - valid_keys = ['pagination', 'project', 'resource', + valid_keys = ['project', 'resource', 'search_offset', 'source', 'timestamp', 'user'] msg = ("unrecognized field in query: %s, " "valid keys: %s") % (q, valid_keys) @@ -409,7 +409,7 @@ class TestQueryToKwArgs(tests_base.BaseTestCase): wsme.exc.UnknownArgument, utils.query_to_kwargs, q, alarm_storage_base.Connection.get_alarms) - valid_keys = ['alarm_id', 'enabled', 'meter', 'name', 'pagination', + valid_keys = ['alarm_id', 'enabled', 'meter', 'name', 'project', 'severity', 'state', 'type', 'user'] msg = ("unrecognized field in query: %s, " "valid keys: %s") % (q, valid_keys) diff --git a/ceilometer/tests/gabbi/gabbits/capabilities.yaml b/ceilometer/tests/gabbi/gabbits/capabilities.yaml index 320fde47a3..1a78a6c0a6 100644 --- a/ceilometer/tests/gabbi/gabbits/capabilities.yaml +++ b/ceilometer/tests/gabbi/gabbits/capabilities.yaml @@ -13,4 +13,3 @@ tests: $.alarm_storage.['storage:production_ready']: true $.event_storage.['storage:production_ready']: true $.storage.['storage:production_ready']: true - $.api.['meters:pagination']: false diff --git a/ceilometer/tests/storage/test_impl_db2.py b/ceilometer/tests/storage/test_impl_db2.py index 2f8db2fb91..77ad1fbcd4 100644 --- a/ceilometer/tests/storage/test_impl_db2.py +++ b/ceilometer/tests/storage/test_impl_db2.py @@ -41,20 +41,16 @@ class CapabilitiesTest(test_base.BaseTestCase): def test_capabilities(self): expected_capabilities = { - 'meters': {'pagination': False, - 'query': {'simple': True, + 'meters': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'resources': {'pagination': False, - 'query': {'simple': True, + 'resources': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'samples': {'pagination': False, - 'query': {'simple': True, + 'samples': {'query': {'simple': True, 'metadata': True, 'complex': True}}, - 'statistics': {'pagination': False, - 'groupby': True, + 'statistics': {'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, diff --git a/ceilometer/tests/storage/test_impl_hbase.py b/ceilometer/tests/storage/test_impl_hbase.py index bd097e3f15..f980cbc6e9 100644 --- a/ceilometer/tests/storage/test_impl_hbase.py +++ b/ceilometer/tests/storage/test_impl_hbase.py @@ -57,20 +57,16 @@ class CapabilitiesTest(test_base.BaseTestCase): def test_capabilities(self): expected_capabilities = { - 'meters': {'pagination': False, - 'query': {'simple': True, + 'meters': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'resources': {'pagination': False, - 'query': {'simple': True, + 'resources': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'samples': {'pagination': False, - 'query': {'simple': True, + 'samples': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'statistics': {'pagination': False, - 'groupby': False, + 'statistics': {'groupby': False, 'query': {'simple': True, 'metadata': True, 'complex': False}, diff --git a/ceilometer/tests/storage/test_impl_mongodb.py b/ceilometer/tests/storage/test_impl_mongodb.py index 772394f960..cdcb601969 100644 --- a/ceilometer/tests/storage/test_impl_mongodb.py +++ b/ceilometer/tests/storage/test_impl_mongodb.py @@ -23,11 +23,9 @@ from ceilometer.alarm.storage import impl_mongodb as impl_mongodb_alarm from ceilometer.event.storage import impl_mongodb as impl_mongodb_event -from ceilometer.storage import base from ceilometer.storage import impl_mongodb from ceilometer.tests import base as test_base from ceilometer.tests import db as tests_db -from ceilometer.tests.storage import test_storage_scenarios @tests_db.run_with('mongodb') @@ -53,36 +51,6 @@ class MongoDBConnection(tests_db.TestBase, self.assertEqual(expect, ret) -@tests_db.run_with('mongodb') -class MongoDBTestMarkerBase(test_storage_scenarios.DBTestBase, - tests_db.MixinTestsWithBackendScenarios): - # NOTE(Fengqian): All these three test case are the same for resource - # and meter collection. As to alarm, we will set up in AlarmTestPagination. - def test_get_marker(self): - marker_pairs = {'user_id': 'user-id-4'} - ret = impl_mongodb.Connection._get_marker(self.conn.db.resource, - marker_pairs) - self.assertEqual('project-id-4', ret['project_id']) - - def test_get_marker_None(self): - marker_pairs = {'user_id': 'user-id-foo'} - try: - ret = impl_mongodb.Connection._get_marker(self.conn.db.resource, - marker_pairs) - self.assertEqual('project-id-foo', ret['project_id']) - except base.NoResultFound: - self.assertTrue(True) - - def test_get_marker_multiple(self): - try: - marker_pairs = {'project_id': 'project-id'} - ret = impl_mongodb.Connection._get_marker(self.conn.db.resource, - marker_pairs) - self.assertEqual('project-id-foo', ret['project_id']) - except base.MultipleResultsFound: - self.assertTrue(True) - - @tests_db.run_with('mongodb') class IndexTest(tests_db.TestBase, tests_db.MixinTestsWithBackendScenarios): @@ -139,57 +107,22 @@ class IndexTest(tests_db.TestBase, 'alarm_history_time_to_live') -@tests_db.run_with('mongodb') -class AlarmTestPagination(test_storage_scenarios.AlarmTestBase, - tests_db.MixinTestsWithBackendScenarios): - def test_alarm_get_marker(self): - self.add_some_alarms() - marker_pairs = {'name': 'red-alert'} - ret = impl_mongodb.Connection._get_marker(self.alarm_conn.db.alarm, - marker_pairs=marker_pairs) - self.assertEqual('test.one', ret['rule']['meter_name']) - - def test_alarm_get_marker_None(self): - self.add_some_alarms() - try: - marker_pairs = {'name': 'user-id-foo'} - ret = impl_mongodb.Connection._get_marker(self.alarm_conn.db.alarm, - marker_pairs) - self.assertEqual('meter_name-foo', ret['rule']['meter_name']) - except base.NoResultFound: - self.assertTrue(True) - - def test_alarm_get_marker_multiple(self): - self.add_some_alarms() - try: - marker_pairs = {'user_id': 'me'} - ret = impl_mongodb.Connection._get_marker(self.alarm_conn.db.alarm, - marker_pairs) - self.assertEqual('counter-name-foo', ret['rule']['meter_name']) - except base.MultipleResultsFound: - self.assertTrue(True) - - class CapabilitiesTest(test_base.BaseTestCase): # Check the returned capabilities list, which is specific to each DB # driver def test_capabilities(self): expected_capabilities = { - 'meters': {'pagination': False, - 'query': {'simple': True, + 'meters': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'resources': {'pagination': False, - 'query': {'simple': True, + 'resources': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'samples': {'pagination': False, - 'query': {'simple': True, + 'samples': {'query': {'simple': True, 'metadata': True, 'complex': True}}, - 'statistics': {'pagination': False, - 'groupby': True, + 'statistics': {'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, diff --git a/ceilometer/tests/storage/test_impl_sqlalchemy.py b/ceilometer/tests/storage/test_impl_sqlalchemy.py index a9a54bf8b3..a4b459d55a 100644 --- a/ceilometer/tests/storage/test_impl_sqlalchemy.py +++ b/ceilometer/tests/storage/test_impl_sqlalchemy.py @@ -135,20 +135,16 @@ class CapabilitiesTest(test_base.BaseTestCase): def test_capabilities(self): expected_capabilities = { - 'meters': {'pagination': False, - 'query': {'simple': True, + 'meters': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'resources': {'pagination': False, - 'query': {'simple': True, + 'resources': {'query': {'simple': True, 'metadata': True, 'complex': False}}, - 'samples': {'pagination': True, - 'query': {'simple': True, + 'samples': {'query': {'simple': True, 'metadata': True, 'complex': True}}, - 'statistics': {'pagination': False, - 'groupby': True, + 'statistics': {'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, diff --git a/ceilometer/tests/storage/test_storage_scenarios.py b/ceilometer/tests/storage/test_storage_scenarios.py index 922f769f12..611b01af0b 100644 --- a/ceilometer/tests/storage/test_storage_scenarios.py +++ b/ceilometer/tests/storage/test_storage_scenarios.py @@ -31,7 +31,6 @@ from ceilometer.event.storage import models as event_models from ceilometer.publisher import utils from ceilometer import sample from ceilometer import storage -from ceilometer.storage import base from ceilometer.tests import constants from ceilometer.tests import db as tests_db @@ -310,49 +309,6 @@ class ResourceTest(DBTestBase, self.assertEqual(expected_tag, resource.metadata['tag']) -class ResourceTestPagination(DBTestBase, - tests_db.MixinTestsWithBackendScenarios): - - def test_get_resource_all_limit(self): - pagination = base.Pagination(limit=8) - results = list(self.conn.get_resources(pagination=pagination)) - self.assertEqual(8, len(results)) - - pagination = base.Pagination(limit=5) - results = list(self.conn.get_resources(pagination=pagination)) - self.assertEqual(5, len(results)) - - def test_get_resources_all_marker(self): - pagination = base.Pagination(primary_sort_dir='asc', - sort_keys=['user_id'], - sort_dirs=['asc'], - marker_value='resource-id-4') - results = list(self.conn.get_resources(pagination=pagination)) - self.assertEqual(5, len(results)) - - def test_get_resources_paginate(self): - pagination = base.Pagination(limit=3, primary_sort_dir='asc', - sort_keys=['user_id'], sort_dirs=['asc'], - marker_value='resource-id-4') - results = self.conn.get_resources(pagination=pagination) - self.assertEqual(['user-id-5', 'user-id-6', 'user-id-7'], - [i.user_id for i in results]) - - pagination = base.Pagination(limit=2, primary_sort_dir='desc', - sort_keys=['user_id'], sort_dirs=['asc'], - marker_value='resource-id-4') - results = list(self.conn.get_resources(pagination=pagination)) - self.assertEqual(['user-id-3', 'user-id-2'], - [i.user_id for i in results]) - - pagination = base.Pagination(limit=3, primary_sort_dir='asc', - sort_keys=['user_id'], sort_dirs=['asc'], - marker_value='resource-id-5') - results = list(self.conn.get_resources(pagination=pagination)) - self.assertEqual(['resource-id-6', 'resource-id-7', 'resource-id-8'], - [i.resource_id for i in results]) - - class ResourceTestOrdering(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def prepare_data(self): @@ -433,56 +389,6 @@ class MeterTest(DBTestBase, self.assertEqual(9, len(results)) -class MeterTestPagination(DBTestBase, - tests_db.MixinTestsWithBackendScenarios): - - def tet_get_meters_all_limit(self): - pagination = base.Pagination(limit=8) - results = list(self.conn.get_meters(pagination=pagination)) - self.assertEqual(8, len(results)) - - pagination = base.Pagination(limit=5) - results = list(self.conn.get_meters(pagination=pagination)) - self.assertEqual(5, len(results)) - - def test_get_meters_all_marker(self): - pagination = base.Pagination(limit=3, primary_sort_dir='desc', - sort_keys=['user_id'], - sort_dirs=['desc'], - marker_value='resource-id-5') - - results = list(self.conn.get_meters(pagination=pagination)) - self.assertEqual(8, len(results)) - - def test_get_meters_paginate(self): - pagination = base.Pagination(limit=3, primary_sort_dir='desc', - sort_keys=['user_id'], sort_dirs=['desc'], - marker_value='resource-id-5') - results = self.conn.get_meters(pagination=pagination) - self.assertEqual(['user-id-8', 'user-id-7', 'user-id-6'], - [i.user_id for i in results]) - - pagination = base.Pagination(limit=3, primary_sort_dir='asc', - sort_keys=['user_id'], sort_dirs=['desc'], - marker_value='resource-id-5') - results = self.conn.get_meters(pagination=pagination) - self.assertEqual(['user-id-5', 'user-id-6', 'user-id-7'], - [i.user_id for i in results]) - - pagination = base.Pagination(limit=2, primary_sort_dir='desc', - sort_keys=['user_id'], sort_dirs=['desc'], - marker_value='resource-id-5') - results = list(self.conn.get_meters(pagination=pagination)) - self.assertEqual(['user-id-3', 'user-id-2'], - [i.user_id for i in results]) - - pagination = base.Pagination(limit=3, primary_sort_dir='desc', - sort_keys=['user_id'], sort_dirs=['desc'], - marker_value='resource-id-5') - results = self.conn.get_meters(pagination=pagination) - self.assertEqual([], [i.user_id for i in results]) - - class RawSampleTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): @@ -2976,48 +2882,6 @@ class AlarmTest(AlarmTestBase, self.assertNotEqual(victim.name, s.name) -class AlarmTestPagination(AlarmTestBase, - tests_db.MixinTestsWithBackendScenarios): - - def test_get_alarm_all_limit(self): - self.add_some_alarms() - pagination = base.Pagination(limit=2) - alarms = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(2, len(alarms)) - - pagination = base.Pagination(limit=1) - alarms = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(1, len(alarms)) - - def test_get_alarm_all_marker(self): - self.add_some_alarms() - - pagination = base.Pagination(marker_value='orange-alert') - alarms = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(0, len(alarms)) - - pagination = base.Pagination(marker_value='red-alert') - alarms = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(1, len(alarms)) - - pagination = base.Pagination(marker_value='yellow-alert') - alarms = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(2, len(alarms)) - - def test_get_alarm_paginate(self): - self.add_some_alarms() - - pagination = base.Pagination(limit=4, marker_value='yellow-alert') - page = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(['red-alert', 'orange-alert'], [i.name for i in page]) - - pagination = base.Pagination(limit=2, marker_value='orange-alert', - primary_sort_dir='asc') - page1 = list(self.alarm_conn.get_alarms(pagination=pagination)) - self.assertEqual(['red-alert', 'yellow-alert'], - [i.name for i in page1]) - - @tests_db.run_with('sqlite', 'mysql', 'pgsql', 'hbase', 'db2') class AlarmHistoryTest(AlarmTestBase, tests_db.MixinTestsWithBackendScenarios):