]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/rbd: add image sparsify method
authorMykola Golub <mgolub@suse.com>
Tue, 29 Jan 2019 11:43:37 +0000 (11:43 +0000)
committerMykola Golub <mgolub@suse.com>
Fri, 15 Feb 2019 11:12:00 +0000 (11:12 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/pybind/rbd/rbd.pyx
src/test/pybind/test_rbd.py

index c18b8bd4657967201f843dc9b47ac2b37350270e..0c5fb3335f9955f4ce50ef0fa0871bea04ed5228 100644 (file)
@@ -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
index 57aaf7c8cf57541f427a32c112cc3f6f8d022241..bafd077af2296f9ea3f459829b4e1f1a38122384 100644 (file)
@@ -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):