From: Mykola Golub Date: Tue, 29 Jan 2019 11:43:37 +0000 (+0000) Subject: pybind/rbd: add image sparsify method X-Git-Tag: v14.1.0~77^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=31ee47fbfdc736bb67811ead17fa73fb5fca6dd4;p=ceph.git pybind/rbd: add image sparsify method Signed-off-by: Mykola Golub --- diff --git a/src/pybind/rbd/rbd.pyx b/src/pybind/rbd/rbd.pyx index c18b8bd46579..0c5fb3335f99 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 57aaf7c8cf57..bafd077af229 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):