diff options
author | Rikimaru Honjo <honjo.rikimaru@po.ntts.co.jp> | 2014-08-11 22:00:50 +0900 |
---|---|---|
committer | Rikimaru Honjo <honjo.rikimaru@po.ntts.co.jp> | 2014-08-11 22:00:50 +0900 |
commit | c6694dea349f4aad63cc06fb42ae5c5907e902ed (patch) | |
tree | 675049568b990d28ebd3504224ccfe5d1947048c /ceilometer/image | |
parent | 9936b3469c833e88d8e39de4919d51b6bb21ff0b (diff) | |
download | ceilometer-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.py | 24 |
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 |