summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-09-07 20:50:03 +0000
committerGerrit Code Review <review@openstack.org>2012-09-07 20:50:03 +0000
commit770df0cef238860ff311a49c83dff48d7374b7ac (patch)
tree402a528cc1393eb3f09f7b50315090f5567272c9 /nova/api
parent16c965a66a3b2c21a35dc37a34d6331890ff3ca5 (diff)
parent75ca5dfa4a740c1f73750394722687cbdf3155e5 (diff)
downloadnova-770df0cef238860ff311a49c83dff48d7374b7ac.tar.gz
nova-770df0cef238860ff311a49c83dff48d7374b7ac.tar.xz
nova-770df0cef238860ff311a49c83dff48d7374b7ac.zip
Merge "Implement paginate query use marker in nova-api"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/common.py13
-rw-r--r--nova/api/openstack/compute/servers.py16
2 files changed, 17 insertions, 12 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index b1e31b0c7..ccc70cd1f 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -185,13 +185,20 @@ def limited(items, request, max_limit=FLAGS.osapi_max_limit):
return items[offset:range_end]
-def limited_by_marker(items, request, max_limit=FLAGS.osapi_max_limit):
- """Return a slice of items according to the requested marker and limit."""
+def get_limit_and_marker(request, max_limit=FLAGS.osapi_max_limit):
+ """get limited parameter from request"""
params = get_pagination_params(request)
-
limit = params.get('limit', max_limit)
+ limit = min(max_limit, limit)
marker = params.get('marker')
+ return limit, marker
+
+
+def limited_by_marker(items, request, max_limit=FLAGS.osapi_max_limit):
+ """Return a slice of items according to the requested marker and limit."""
+ limit, marker = get_limit_and_marker(request, max_limit)
+
limit = min(max_limit, limit)
start_index = 0
if marker:
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index 229c3b5aa..9f462c565 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -446,16 +446,17 @@ class Controller(wsgi.Controller):
else:
search_opts['user_id'] = context.user_id
+ limit, marker = common.get_limit_and_marker(req)
instance_list = self.compute_api.get_all(context,
- search_opts=search_opts)
+ search_opts=search_opts,
+ limit=limit, marker=marker)
- limited_list = self._limit_items(instance_list, req)
if is_detail:
- self._add_instance_faults(context, limited_list)
- response = self._view_builder.detail(req, limited_list)
+ self._add_instance_faults(context, instance_list)
+ response = self._view_builder.detail(req, instance_list)
else:
- response = self._view_builder.index(req, limited_list)
- req.cache_db_instances(limited_list)
+ response = self._view_builder.index(req, instance_list)
+ req.cache_db_instances(instance_list)
return response
def _get_server(self, context, req, instance_uuid):
@@ -1021,9 +1022,6 @@ class Controller(wsgi.Controller):
self.compute_api.set_admin_password(context, server, password)
return webob.Response(status_int=202)
- def _limit_items(self, items, req):
- return common.limited_by_marker(items, req)
-
def _validate_metadata(self, metadata):
"""Ensure that we can work with the metadata given."""
try: