]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls/rbd: async methods for snapshot_get_limit
authorMykola Golub <mgolub@suse.com>
Thu, 21 Nov 2019 14:21:09 +0000 (14:21 +0000)
committerMykola Golub <mgolub@suse.com>
Tue, 10 Dec 2019 15:45:30 +0000 (15:45 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/cls/rbd/cls_rbd_client.cc
src/cls/rbd/cls_rbd_client.h

index 892b089d1dfddc21c168412f6df27cc28ee150b7..5b39ab81e4cbc8c07bd9aba4306d6061f04c685f 100644 (file)
@@ -916,24 +916,36 @@ void set_protection_status(librados::ObjectWriteOperation *op,
   op->exec("rbd", "set_protection_status", in);
 }
 
+void snapshot_get_limit_start(librados::ObjectReadOperation *op)
+{
+  bufferlist bl;
+  op->exec("rbd", "snapshot_get_limit", bl);
+}
+
+int snapshot_get_limit_finish(bufferlist::const_iterator *it, uint64_t *limit)
+{
+  try {
+    decode(*limit, *it);
+  } catch (const buffer::error &err) {
+    return -EBADMSG;
+  }
+  return 0;
+}
+
 int snapshot_get_limit(librados::IoCtx *ioctx, const std::string &oid,
                        uint64_t *limit)
 {
-  bufferlist in, out;
-  int r =  ioctx->exec(oid, "rbd", "snapshot_get_limit", in, out);
+  librados::ObjectReadOperation op;
+  snapshot_get_limit_start(&op);
 
+  bufferlist out_bl;
+  int r = ioctx->operate(oid, &op, &out_bl);
   if (r < 0) {
     return r;
   }
 
-  try {
-    auto iter = out.cbegin();
-    decode(*limit, iter);
-  } catch (const buffer::error &err) {
-    return -EBADMSG;
-  }
-
-  return 0;
+  auto it = out_bl.cbegin();
+  return snapshot_get_limit_finish(&it, limit);
 }
 
 void snapshot_set_limit(librados::ObjectWriteOperation *op, uint64_t limit)
index fea8b27a070b28c0e11d7bf4a5accc665472b3f9..0a0e1617f17e8b4bc2cfe8582a732176b87b8f36 100644 (file)
@@ -191,6 +191,8 @@ int set_protection_status(librados::IoCtx *ioctx, const std::string &oid,
 void set_protection_status(librados::ObjectWriteOperation *op,
                            snapid_t snap_id, uint8_t protection_status);
 
+void snapshot_get_limit_start(librados::ObjectReadOperation *op);
+int snapshot_get_limit_finish(bufferlist::const_iterator *it, uint64_t *limit);
 int snapshot_get_limit(librados::IoCtx *ioctx, const std::string &oid,
                        uint64_t *limit);
 void snapshot_set_limit(librados::ObjectWriteOperation *op,