summaryrefslogtreecommitdiff
path: root/ceilometer/image
diff options
context:
space:
mode:
authorRikimaru Honjo <honjo.rikimaru@po.ntts.co.jp>2014-08-11 22:00:50 +0900
committerRikimaru Honjo <honjo.rikimaru@po.ntts.co.jp>2014-08-11 22:00:50 +0900
commitc6694dea349f4aad63cc06fb42ae5c5907e902ed (patch)
tree675049568b990d28ebd3504224ccfe5d1947048c /ceilometer/image
parent9936b3469c833e88d8e39de4919d51b6bb21ff0b (diff)
downloadceilometer-c6694dea349f4aad63cc06fb42ae5c5907e902ed.tar.gz
Set page size when Glance API request is called
The glance related pollsters in central agent uses glanceclient to get image-list from glance. Since glanceclient has pagination feature, it calls glance API for every page sizes. When glanceclient is used by Central Agent, default value of page size, that is 20, is used, since Central Agent doesn't specify page size. However, default value of page size is too small when there is a large number of images. Therefore we need to specify page size from Central Agent. Change-Id: I5f6457234a2963bbe567d078f2c8bb098c8a311c Closes-bug: #1340577
Diffstat (limited to 'ceilometer/image')
-rw-r--r--ceilometer/image/glance.py24
1 files changed, 20 insertions, 4 deletions
diff --git a/ceilometer/image/glance.py b/ceilometer/image/glance.py
index e102f65c..85bf6851 100644
--- a/ceilometer/image/glance.py
+++ b/ceilometer/image/glance.py
@@ -28,6 +28,20 @@ from ceilometer.openstack.common import timeutils
from ceilometer import sample
+OPTS = [
+ cfg.IntOpt('glance_page_size',
+ default=0,
+ help="Number of items to request in "
+ "each paginated Glance API request "
+ "(parameter used by glancecelient). "
+ "If this is less than or equal to 0, "
+ "page size is not specified "
+ "(default value in glanceclient is used)."),
+]
+
+cfg.CONF.register_opts(OPTS)
+
+
class _Base(plugin.CentralPollster):
@staticmethod
@@ -45,13 +59,15 @@ class _Base(plugin.CentralPollster):
def _get_images(self, ksclient):
client = self.get_glance_client(ksclient)
- # TODO(eglynn): use pagination to protect against unbounded
- # memory usage
+ page_size = cfg.CONF.glance_page_size
+ kwargs = {}
+ if page_size > 0:
+ kwargs['page_size'] = page_size
rawImageList = list(itertools.chain(
- client.images.list(filters={"is_public": True}),
+ client.images.list(filters={"is_public": True}, **kwargs),
# TODO(eglynn): extend glance API with all_tenants logic to
# avoid second call to retrieve private images
- client.images.list(filters={"is_public": False})))
+ client.images.list(filters={"is_public": False}, **kwargs)))
# When retrieving images from glance, glance will check
# whether the user is of 'admin_role' which is