]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_rbd: async version of metadata_list helper method
authorJason Dillaman <dillaman@redhat.com>
Wed, 18 May 2016 21:50:07 +0000 (17:50 -0400)
committerAbhishek Varshney <abhishek.varshney@flipkart.com>
Wed, 25 May 2016 10:49:30 +0000 (16:19 +0530)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit 985cb38211c51c95d84479df231c4f53847cb2ec)

src/cls/rbd/cls_rbd_client.cc
src/cls/rbd/cls_rbd_client.h

index ec57f7f8daae2faba81896d7818568132d28f381..e7bd1cf05716bb97eef4695e44457d304afd6d62 100644 (file)
@@ -942,21 +942,37 @@ namespace librbd {
                       const std::string &start, uint64_t max_return,
                       map<string, bufferlist> *pairs)
     {
-      assert(pairs);
-      bufferlist in, out;
-      ::encode(start, in);
-      ::encode(max_return, in);
-      int r = ioctx->exec(oid, "rbd", "metadata_list", in, out);
-      if (r < 0)
+      librados::ObjectReadOperation op;
+      metadata_list_start(&op, start, max_return);
+
+      bufferlist out_bl;
+      int r = ioctx->operate(oid, &op, &out_bl);
+      if (r < 0) {
         return r;
+      }
 
-      bufferlist::iterator iter = out.begin();
+      bufferlist::iterator it = out_bl.begin();
+      return metadata_list_finish(&it, pairs);
+    }
+
+    void metadata_list_start(librados::ObjectReadOperation *op,
+                             const std::string &start, uint64_t max_return)
+    {
+      bufferlist in_bl;
+      ::encode(start, in_bl);
+      ::encode(max_return, in_bl);
+      op->exec("rbd", "metadata_list", in_bl);
+    }
+
+    int metadata_list_finish(bufferlist::iterator *it,
+                             std::map<std::string, bufferlist> *pairs)
+    {
+      assert(pairs);
       try {
-        ::decode(*pairs, iter);
+        ::decode(*pairs, *it);
       } catch (const buffer::error &err) {
         return -EBADMSG;
       }
-
       return 0;
     }
 
index b3dd22eb3753b22309f91179edb34fa71ac7bcee..c23e143cd2867dee67e364134bce4df7e424e011 100644 (file)
@@ -135,6 +135,10 @@ namespace librbd {
     int metadata_list(librados::IoCtx *ioctx, const std::string &oid,
                       const std::string &start, uint64_t max_return,
                       map<string, bufferlist> *pairs);
+    void metadata_list_start(librados::ObjectReadOperation *op,
+                             const std::string &start, uint64_t max_return);
+    int metadata_list_finish(bufferlist::iterator *it,
+                             std::map<std::string, bufferlist> *pairs);
     int metadata_set(librados::IoCtx *ioctx, const std::string &oid,
                      const map<std::string, bufferlist> &data);
     int metadata_remove(librados::IoCtx *ioctx, const std::string &oid,