Raise Error when pagination support is missing

Raise NotImplementedError if storage backend doesn't support the
pagination.

This change is needs by the blueprint db-tests-with-scenarios

Change-Id: I1c234697cf4522167dd5b22107028ddd0f40a4c7
This commit is contained in:
Mehdi Abaakouk 2013-08-20 14:51:34 +02:00
parent 748c2da238
commit 054a4b71c8
2 changed files with 60 additions and 6 deletions

View File

@ -28,6 +28,7 @@ import os
import re
import urlparse
from ceilometer.openstack.common.gettextutils import _
from ceilometer.openstack.common import log
from ceilometer.openstack.common import timeutils
from ceilometer.openstack.common import network_utils
@ -282,7 +283,8 @@ 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={}, resource=None):
metaquery={}, resource=None, limit=None,
marker_pairs=None, sort_key=None, sort_dir=None):
"""Return an iterable of models.Resource instances
:param user: Optional ID for user that owns the resource.
@ -294,8 +296,16 @@ 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 limit: Number of documents should be returned.
:param marker_pairs: Attribute-value pairs to identify the last item of
the previous page.
:param sort_key: Attribute by which results be sorted.
:param sort_dir: Direction with which results be sorted(asc, desc).
"""
if limit or marker_pairs or sort_key or sort_dir:
raise NotImplementedError(_('Pagination not implemented'))
def make_resource(data, first_ts, last_ts):
"""Transform HBase fields to Resource model."""
# convert HBase metadata e.g. f:r_display_name to display_name
@ -363,7 +373,8 @@ class Connection(base.Connection):
resources[data['f:resource_id']][1])
def get_meters(self, user=None, project=None, resource=None, source=None,
metaquery={}):
metaquery={}, limit=None, marker_pairs=None,
sort_key=None, sort_dir=None):
"""Return an iterable of models.Meter instances
:param user: Optional ID for user that owns the resource.
@ -371,8 +382,16 @@ class Connection(base.Connection):
:param resource: Optional resource filter.
:param source: Optional source filter.
:param metaquery: Optional dict with metadata to match on.
:param limit: Number of documents should be returned.
:param marker_pairs: Attribute-value pairs to identify the last item of
the previous page.
:param sort_key: Attribute by which results be sorted.
:param sort_dir: Direction with which results be sorted(asc, desc).
"""
if limit or marker_pairs or sort_key or sort_dir:
raise NotImplementedError(_('Pagination not implemented'))
resource_table = self.conn.table(self.RESOURCE_TABLE)
q = make_query(user=user, project=project, resource=resource,
source=source, require_meter=False, query_only=True)
@ -573,7 +592,8 @@ class Connection(base.Connection):
return results
def get_alarms(self, name=None, user=None,
project=None, enabled=True, alarm_id=None):
project=None, enabled=True, alarm_id=None, limit=None,
marker_pairs=None, sort_key=None, sort_dir=None):
"""Yields a lists of alarms that match filters
raise NotImplementedError('metaquery not implemented')
"""

View File

@ -27,6 +27,7 @@ from sqlalchemy import func
from sqlalchemy import desc
from sqlalchemy.orm import aliased
from ceilometer.openstack.common.gettextutils import _
from ceilometer.openstack.common import log
from ceilometer.openstack.common import timeutils
import ceilometer.openstack.common.db.sqlalchemy.session as sqlalchemy_session
@ -273,7 +274,8 @@ class Connection(base.Connection):
def get_resources(user=None, project=None, source=None,
start_timestamp=None, start_timestamp_op=None,
end_timestamp=None, end_timestamp_op=None,
metaquery={}, resource=None):
metaquery={}, resource=None, limit=None,
marker_pairs=None, sort_key=None, sort_dir=None):
"""Return an iterable of api_models.Resource instances
:param user: Optional ID for user that owns the resource.
@ -285,7 +287,16 @@ 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 limit: Number of documents should be returned.
:param marker_pairs: Attribute-value pairs to identify the last item of
the previous page.
:param sort_key: Attribute by which results be sorted.
:param sort_dir: Direction with which results be sorted(asc, desc).
"""
if limit or marker_pairs or sort_key or sort_dir:
raise NotImplementedError(_('Pagination not implemented'))
session = sqlalchemy_session.get_session()
query = session.query(
Meter,
@ -334,7 +345,8 @@ class Connection(base.Connection):
@staticmethod
def get_meters(user=None, project=None, resource=None, source=None,
metaquery={}):
metaquery={}, limit=None, marker_pairs=None,
sort_key=None, sort_dir=None):
"""Return an iterable of api_models.Meter instances
:param user: Optional ID for user that owns the resource.
@ -342,7 +354,16 @@ 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 limit: Number of documents should be returned.
:param marker_pairs: Attribute-value pairs to identify the last item of
the previous page.
:param sort_key: Attribute by which results be sorted.
:param sort_dir: Direction with which results be sorted(asc, desc).
"""
if limit or marker_pairs or sort_key or sort_dir:
raise NotImplementedError(_('Pagination not implemented'))
session = sqlalchemy_session.get_session()
# Meter table will store large records and join with resource
@ -558,13 +579,26 @@ class Connection(base.Connection):
return row
def get_alarms(self, name=None, user=None,
project=None, enabled=True, alarm_id=None):
project=None, enabled=True, alarm_id=None,
limit=None, marker_pairs=None,
sort_key=None, sort_dir=None):
"""Yields a lists of alarms that match filters
:param user: Optional ID for user that owns the resource.
: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 metaquery: Optional dict with metadata to match on.
:param resource: Optional resource filter.
:param limit: Number of documents should be returned.
:param marker_pairs: Attribute-value pairs to identify the last item of
the previous page.
:param sort_key: Attribute by which results be sorted.
:param sort_dir: Direction with which results be sorted(asc, desc).
"""
if limit or marker_pairs or sort_key or sort_dir:
raise NotImplementedError(_('Pagination not implemented'))
session = sqlalchemy_session.get_session()
query = session.query(Alarm)
if name is not None: