]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_rbd: async version of dir_get_name
authorMykola Golub <mgolub@mirantis.com>
Tue, 23 Feb 2016 09:26:37 +0000 (11:26 +0200)
committerMykola Golub <mgolub@mirantis.com>
Tue, 23 Feb 2016 20:23:21 +0000 (22:23 +0200)
Signed-off-by: Mykola Golub <mgolub@mirantis.com>
src/cls/rbd/cls_rbd_client.cc
src/cls/rbd/cls_rbd_client.h

index b2aee96a56841d66a73e7471bf4c31e58007a405..50c1b63f3bb9b9bcd7fccb901234c29ef2cf7661 100644 (file)
@@ -758,25 +758,37 @@ namespace librbd {
       return 0;
     }
 
-    int dir_get_name(librados::IoCtx *ioctx, const std::string &oid,
-                    const std::string &id, std::string *name)
-    {
-      bufferlist in, out;
-      ::encode(id, in);
-      int r = ioctx->exec(oid, "rbd", "dir_get_name", in, out);
-      if (r < 0)
-       return r;
+    void dir_get_name_start(librados::ObjectReadOperation *op,
+                           const std::string &id) {
+      bufferlist in_bl;
+      ::encode(id, in_bl);
+      op->exec("rbd", "dir_get_name", in_bl);
+    }
 
-      bufferlist::iterator iter = out.begin();
+    int dir_get_name_finish(bufferlist::iterator *it, std::string *name) {
       try {
-       ::decode(*name, iter);
+       ::decode(*name, *it);
       } catch (const buffer::error &err) {
        return -EBADMSG;
       }
-
       return 0;
     }
 
+    int dir_get_name(librados::IoCtx *ioctx, const std::string &oid,
+                    const std::string &id, std::string *name) {
+      librados::ObjectReadOperation op;
+      dir_get_name_start(&op, id);
+
+      bufferlist out_bl;
+      int r = ioctx->operate(oid, &op, &out_bl);
+      if (r < 0) {
+        return r;
+      }
+
+      bufferlist::iterator it = out_bl.begin();
+      return dir_get_name_finish(&it, name);
+    }
+
     int dir_list(librados::IoCtx *ioctx, const std::string &oid,
                 const std::string &start, uint64_t max_return,
                 map<string, string> *images)
index 2d3ac8729c19de6f9a56a084ab0b21d9df4512c5..6e497e6a9e7658ee6314affd94ffc801e2384815 100644 (file)
@@ -152,6 +152,9 @@ namespace librbd {
     // operations on rbd_directory objects
     int dir_get_id(librados::IoCtx *ioctx, const std::string &oid,
                   const std::string &name, std::string *id);
+    void dir_get_name_start(librados::ObjectReadOperation *op,
+                           const std::string &id);
+    int dir_get_name_finish(bufferlist::iterator *it, std::string *name);
     int dir_get_name(librados::IoCtx *ioctx, const std::string &oid,
                     const std::string &id, std::string *name);
     int dir_list(librados::IoCtx *ioctx, const std::string &oid,