]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cls/rbd: async methods for mirror_peer_list
authorMykola Golub <mgolub@suse.com>
Thu, 10 Oct 2019 15:14:46 +0000 (16:14 +0100)
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 678df7c03bbf707741c5fe865bf6aa6df14b5262..514acefeeca79fec5f04bcae91028549d5255d0b 100644 (file)
@@ -1810,22 +1810,37 @@ int mirror_mode_set(librados::IoCtx *ioctx,
   return 0;
 }
 
+void mirror_peer_list_start(librados::ObjectReadOperation *op) {
+  bufferlist bl;
+  op->exec("rbd", "mirror_peer_list", bl);
+}
+
+int mirror_peer_list_finish(bufferlist::const_iterator *it,
+                            std::vector<cls::rbd::MirrorPeer> *peers) {
+  peers->clear();
+  try {
+    decode(*peers, *it);
+  } catch (const buffer::error &err) {
+    return -EBADMSG;
+  }
+  return 0;
+}
+
 int mirror_peer_list(librados::IoCtx *ioctx,
                      std::vector<cls::rbd::MirrorPeer> *peers) {
-  bufferlist in_bl;
+  librados::ObjectReadOperation op;
+  mirror_peer_list_start(&op);
+
   bufferlist out_bl;
-  int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_peer_list", in_bl,
-                      out_bl);
+  int r = ioctx->operate(RBD_MIRRORING, &op, &out_bl);
   if (r < 0) {
     return r;
   }
 
-  peers->clear();
-  try {
-    auto bl_it = out_bl.cbegin();
-    decode(*peers, bl_it);
-  } catch (const buffer::error &err) {
-    return -EBADMSG;
+  auto it = out_bl.cbegin();
+  r = mirror_peer_list_finish(&it, peers);
+  if (r < 0) {
+    return r;
   }
   return 0;
 }
index 854592062606ad3a10aa124de7b159af03598eb2..5ff683737e1f8963270f0e615d70635f7c4b15a1 100644 (file)
@@ -388,6 +388,9 @@ int mirror_peer_ping(librados::IoCtx *ioctx,
 void mirror_peer_ping(librados::ObjectWriteOperation *op,
                       const std::string& site_name,
                       const std::string& fsid);
+void mirror_peer_list_start(librados::ObjectReadOperation *op);
+int mirror_peer_list_finish(bufferlist::const_iterator *it,
+                            std::vector<cls::rbd::MirrorPeer> *peers);
 int mirror_peer_list(librados::IoCtx *ioctx,
                      std::vector<cls::rbd::MirrorPeer> *peers);
 int mirror_peer_add(librados::IoCtx *ioctx,