From 02116565d358a4fa254217779fef82b14b38d8ca Mon Sep 17 00:00:00 2001 From: Jared Culp Date: Thu, 11 Jul 2013 14:04:15 -0400 Subject: [PATCH] Increase default page_size value This is a temporary solution. Increasing the default page size (which is being used everytime, since the client is ignoring nova's --limit param). This should decrease the number of queries that glance does when nova requests an image detail list. Bug 1200257 Change-Id: I7ed4521698570cbae9c20e69ddca8b11b57c65ad --- glanceclient/v1/images.py | 2 +- glanceclient/v2/images.py | 2 +- tests/v1/test_images.py | 76 ++++++++++++++++++++++++++++----------- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/glanceclient/v1/images.py b/glanceclient/v1/images.py index 05d687ce..c96d5fa8 100644 --- a/glanceclient/v1/images.py +++ b/glanceclient/v1/images.py @@ -33,7 +33,7 @@ UPDATE_PARAMS = ('name', 'disk_format', 'container_format', 'min_disk', CREATE_PARAMS = UPDATE_PARAMS + ('id', 'store') -DEFAULT_PAGE_SIZE = 20 +DEFAULT_PAGE_SIZE = 100 SORT_DIR_VALUES = ('asc', 'desc') SORT_KEY_VALUES = ('name', 'status', 'container_format', 'disk_format', diff --git a/glanceclient/v2/images.py b/glanceclient/v2/images.py index 6060eef8..8e42e994 100644 --- a/glanceclient/v2/images.py +++ b/glanceclient/v2/images.py @@ -18,7 +18,7 @@ import urllib from glanceclient.common import utils from glanceclient.openstack.common import strutils -DEFAULT_PAGE_SIZE = 20 +DEFAULT_PAGE_SIZE = 100 class Controller(object): diff --git a/tests/v1/test_images.py b/tests/v1/test_images.py index 708d3804..9b93639d 100644 --- a/tests/v1/test_images.py +++ b/tests/v1/test_images.py @@ -20,10 +20,10 @@ import sys import testtools import urlparse -import glanceclient.v1.client as client -import glanceclient.v1.images -import glanceclient.v1.shell as shell -import glanceclient.v1.legacy_shell as legacy_shell +from glanceclient.v1 import client +from glanceclient.v1 import images +from glanceclient.v1 import legacy_shell +from glanceclient.v1 import shell from tests import utils @@ -51,7 +51,7 @@ fixtures = { ), ), }, - '/v1/images/detail?limit=20': { + '/v1/images/detail?limit=%d' % images.DEFAULT_PAGE_SIZE: { 'GET': ( {}, {'images': [ @@ -68,7 +68,7 @@ fixtures = { ]}, ), }, - '/v1/images/detail?marker=a&limit=20': { + '/v1/images/detail?marker=a&limit=%d' % images.DEFAULT_PAGE_SIZE: { 'GET': ( {}, {'images': [ @@ -85,6 +85,30 @@ fixtures = { ]}, ), }, + '/v1/images/detail?limit=1': { + 'GET': ( + {}, + {'images': [ + { + 'id': 'a', + 'name': 'image-0', + 'properties': {'arch': 'x86_64'}, + }, + ]}, + ), + }, + '/v1/images/detail?marker=a&limit=1': { + 'GET': ( + {}, + {'images': [ + { + 'id': 'b', + 'name': 'image-1', + 'properties': {'arch': 'x86_64'}, + }, + ]}, + ), + }, '/v1/images/detail?limit=2': { 'GET': ( {}, @@ -114,7 +138,7 @@ fixtures = { ]}, ), }, - '/v1/images/detail?limit=20&name=foo': { + '/v1/images/detail?limit=%d&name=foo' % images.DEFAULT_PAGE_SIZE: { 'GET': ( {}, {'images': [ @@ -131,7 +155,8 @@ fixtures = { ]}, ), }, - '/v1/images/detail?property-ping=pong&limit=20': { + '/v1/images/detail?property-ping=pong&limit=%d' % images.DEFAULT_PAGE_SIZE: + { 'GET': ( {}, {'images': [ @@ -143,7 +168,7 @@ fixtures = { ]}, ), }, - '/v1/images/detail?sort_dir=desc&limit=20': { + '/v1/images/detail?sort_dir=desc&limit=%d' % images.DEFAULT_PAGE_SIZE: { 'GET': ( {}, {'images': [ @@ -160,7 +185,7 @@ fixtures = { ]}, ), }, - '/v1/images/detail?sort_key=name&limit=20': { + '/v1/images/detail?sort_key=name&limit=%d' % images.DEFAULT_PAGE_SIZE: { 'GET': ( {}, {'images': [ @@ -250,7 +275,7 @@ class ImageManagerTest(testtools.TestCase): def setUp(self): super(ImageManagerTest, self).setUp() self.api = utils.FakeAPI(fixtures) - self.mgr = glanceclient.v1.images.ImageManager(self.api) + self.mgr = images.ImageManager(self.api) def test_paginated_list(self): images = list(self.mgr.list(page_size=2)) @@ -271,35 +296,46 @@ class ImageManagerTest(testtools.TestCase): self.assertEqual(self.api.calls, expect) def test_list_with_limit_greater_than_page_size(self): - list(self.mgr.list(page_size=20, limit=30)) - expect = [('GET', '/v1/images/detail?limit=20', {}, None)] + images = list(self.mgr.list(page_size=1, limit=2)) + expect = [ + ('GET', '/v1/images/detail?limit=1', {}, None), + ('GET', '/v1/images/detail?marker=a&limit=1', {}, None), + ] + self.assertEqual(len(images), 2) + self.assertEqual(images[0].id, 'a') + self.assertEqual(images[1].id, 'b') self.assertEqual(self.api.calls, expect) def test_list_with_marker(self): list(self.mgr.list(marker='a')) - expect = [('GET', '/v1/images/detail?marker=a&limit=20', {}, None)] + url = '/v1/images/detail?marker=a&limit=%d' % images.DEFAULT_PAGE_SIZE + expect = [('GET', url, {}, None)] self.assertEqual(self.api.calls, expect) def test_list_with_filter(self): list(self.mgr.list(filters={'name': "foo"})) - expect = [('GET', '/v1/images/detail?limit=20&name=foo', {}, None)] + url = '/v1/images/detail?limit=%d&name=foo' % images.DEFAULT_PAGE_SIZE + expect = [('GET', url, {}, None)] self.assertEqual(self.api.calls, expect) def test_list_with_property_filters(self): list(self.mgr.list(filters={'properties': {'ping': 'pong'}})) - url = '/v1/images/detail?property-ping=pong&limit=20' + url = '/v1/images/detail?property-ping=pong&limit=%d' % \ + images.DEFAULT_PAGE_SIZE expect = [('GET', url, {}, None)] self.assertEqual(self.api.calls, expect) def test_list_with_sort_dir(self): list(self.mgr.list(sort_dir='desc')) - url = '/v1/images/detail?sort_dir=desc&limit=20' + url = '/v1/images/detail?sort_dir=desc&limit=%d' % \ + images.DEFAULT_PAGE_SIZE expect = [('GET', url, {}, None)] self.assertEqual(self.api.calls, expect) def test_list_with_sort_key(self): list(self.mgr.list(sort_key='name')) - url = '/v1/images/detail?sort_key=name&limit=20' + url = '/v1/images/detail?sort_key=name&limit=%d' % \ + images.DEFAULT_PAGE_SIZE expect = [('GET', url, {}, None)] self.assertEqual(self.api.calls, expect) @@ -470,7 +506,7 @@ class ImageTest(testtools.TestCase): def setUp(self): super(ImageTest, self).setUp() self.api = utils.FakeAPI(fixtures) - self.mgr = glanceclient.v1.images.ImageManager(self.api) + self.mgr = images.ImageManager(self.api) def test_delete(self): image = self.mgr.get('1') @@ -579,7 +615,7 @@ class UrlParameterTest(testtools.TestCase): super(UrlParameterTest, self).setUp() self.api = ParameterFakeAPI({}) self.gc = client.Client("http://fakeaddress.com") - self.gc.images = glanceclient.v1.images.ImageManager(self.api) + self.gc.images = images.ImageManager(self.api) def test_is_public_list(self): shell.do_image_list(self.gc, FakeArg({"is_public": "True"}))