From 31ee47fbfdc736bb67811ead17fa73fb5fca6dd4 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 29 Jan 2019 11:43:37 +0000 Subject: [PATCH] pybind/rbd: add image sparsify method Signed-off-by: Mykola Golub --- src/pybind/rbd/rbd.pyx | 12 ++++++++++++ src/test/pybind/test_rbd.py | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/src/pybind/rbd/rbd.pyx b/src/pybind/rbd/rbd.pyx index c18b8bd4657..0c5fb3335f9 100644 --- a/src/pybind/rbd/rbd.pyx +++ b/src/pybind/rbd/rbd.pyx @@ -451,6 +451,7 @@ cdef extern from "rbd/librbd.h" nogil: char *original_name, size_t max_length) int rbd_flatten(rbd_image_t image) + int rbd_sparsify(rbd_image_t image, size_t sparse_size) int rbd_rebuild_object_map(rbd_image_t image, librbd_progress_fn_t cb, void *cbdata) int rbd_list_children3(rbd_image_t image, rbd_linked_image_spec_t *children, @@ -3721,6 +3722,17 @@ written." % (self.name, ret, length)) if ret < 0: raise make_ex(ret, "error flattening %s" % self.name) + def sparsify(self, sparse_size): + """ + Reclaim space for zeroed image extents + """ + cdef: + size_t _sparse_size = sparse_size + with nogil: + ret = rbd_sparsify(self.image, _sparse_size) + if ret < 0: + raise make_ex(ret, "error sparsifying %s" % self.name) + def rebuild_object_map(self): """ Rebuild the object map for the image HEAD or currently set snapshot diff --git a/src/test/pybind/test_rbd.py b/src/test/pybind/test_rbd.py index 57aaf7c8cf5..bafd077af22 100644 --- a/src/test/pybind/test_rbd.py +++ b/src/test/pybind/test_rbd.py @@ -1117,6 +1117,10 @@ class TestImage(object): for option in image.config_list(): eq(option['source'], RBD_CONFIG_SOURCE_CONFIG) + def test_sparsify(self): + assert_raises(InvalidArgument, self.image.sparsify, 16) + self.image.sparsify(4096) + class TestImageId(object): def setUp(self): -- 2.39.5