If rbd_list2 returns ERANGE, it sets num_images to the value required.
But it is better to retry with a bigger number, to avoid new retries
if images are added to the pool at that time.
Also the initial value for num_images looks too small.
Signed-off-by: Mykola Golub <mgolub@suse.com>
def __init__(self, ioctx):
self.ioctx = convert_ioctx(ioctx)
self.images = NULL
- self.num_images = 32
+ self.num_images = 1024
while True:
self.images = <rbd_image_spec_t*>realloc_chk(
self.images, self.num_images * sizeof(rbd_image_spec_t))
ret = rbd_list2(self.ioctx, self.images, &self.num_images)
if ret >= 0:
break
- elif ret != -errno.ERANGE:
+ elif ret == -errno.ERANGE:
+ self.num_images *= 2
+ else:
raise make_ex(ret, 'error listing images.')
def __iter__(self):