]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cls/rbd: add support for neorados-style IO requests
authorJason Dillaman <dillaman@redhat.com>
Thu, 9 Jul 2020 21:03:53 +0000 (17:03 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 16 Jul 2020 19:59:31 +0000 (15:59 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/cls/rbd/cls_rbd_client.cc
src/cls/rbd/cls_rbd_client.h
src/test/cls_rbd/CMakeLists.txt
src/tools/rbd/CMakeLists.txt

index f9ba2419a6809b20eba4c0fdd5bcec72ee130b36..28f1600a8553da5bd7c03525f33322c3427a8ad1 100644 (file)
@@ -7,6 +7,7 @@
 #include "include/encoding.h"
 #include "include/rbd_types.h"
 #include "include/rados/librados.hpp"
+#include "include/neorados/RADOS.hpp"
 #include "common/bit_vector.hpp"
 
 #include <errno.h>
@@ -841,10 +842,19 @@ int get_all_features(librados::IoCtx *ioctx, const std::string &oid,
   return get_all_features_finish(&it, all_features);
 }
 
-void copyup(librados::ObjectWriteOperation *op, bufferlist data) {
+template <typename O>
+void copyup(O* op, ceph::buffer::list data) {
   op->exec("rbd", "copyup", data);
 }
 
+void copyup(neorados::WriteOp* op, ceph::buffer::list data) {
+  copyup<neorados::WriteOp>(op, data);
+}
+
+void copyup(librados::ObjectWriteOperation *op, bufferlist data) {
+  copyup<librados::ObjectWriteOperation>(op, data);
+}
+
 int copyup(librados::IoCtx *ioctx, const std::string &oid,
            bufferlist data) {
   librados::ObjectWriteOperation op;
@@ -853,15 +863,26 @@ int copyup(librados::IoCtx *ioctx, const std::string &oid,
   return ioctx->operate(oid, &op);
 }
 
-void sparse_copyup(librados::ObjectWriteOperation *op,
-                   const std::map<uint64_t, uint64_t> &extent_map,
-                   bufferlist data) {
+template <typename O, typename E>
+void sparse_copyup(O* op, const E& extent_map, ceph::buffer::list data) {
   bufferlist bl;
   encode(extent_map, bl);
   encode(data, bl);
   op->exec("rbd", "sparse_copyup", bl);
 }
 
+void sparse_copyup(neorados::WriteOp* op,
+                   const std::map<uint64_t, uint64_t> &extent_map,
+                   ceph::buffer::list data) {
+  sparse_copyup<neorados::WriteOp>(op, extent_map, data);
+}
+
+void sparse_copyup(librados::ObjectWriteOperation *op,
+                   const std::map<uint64_t, uint64_t> &extent_map,
+                   bufferlist data) {
+  sparse_copyup<librados::ObjectWriteOperation>(op, extent_map, data);
+}
+
 int sparse_copyup(librados::IoCtx *ioctx, const std::string &oid,
                   const std::map<uint64_t, uint64_t> &extent_map,
                   bufferlist data) {
@@ -1732,6 +1753,27 @@ void migration_remove(librados::ObjectWriteOperation *op) {
   op->exec("rbd", "migration_remove", bl);
 }
 
+template <typename O>
+void assert_snapc_seq(O* op, uint64_t snapc_seq,
+                      cls::rbd::AssertSnapcSeqState state) {
+  bufferlist bl;
+  encode(snapc_seq, bl);
+  encode(state, bl);
+  op->exec("rbd", "assert_snapc_seq", bl);
+}
+
+void assert_snapc_seq(neorados::WriteOp* op,
+                      uint64_t snapc_seq,
+                      cls::rbd::AssertSnapcSeqState state) {
+  assert_snapc_seq<neorados::WriteOp>(op, snapc_seq, state);
+}
+
+void assert_snapc_seq(librados::ObjectWriteOperation *op,
+                      uint64_t snapc_seq,
+                      cls::rbd::AssertSnapcSeqState state) {
+  assert_snapc_seq<librados::ObjectWriteOperation>(op, snapc_seq, state);
+}
+
 int assert_snapc_seq(librados::IoCtx *ioctx, const std::string &oid,
                      uint64_t snapc_seq,
                      cls::rbd::AssertSnapcSeqState state) {
@@ -1740,15 +1782,6 @@ int assert_snapc_seq(librados::IoCtx *ioctx, const std::string &oid,
   return ioctx->operate(oid, &op);
 }
 
-void assert_snapc_seq(librados::ObjectWriteOperation *op,
-                      uint64_t snapc_seq,
-                      cls::rbd::AssertSnapcSeqState state) {
-  bufferlist bl;
-  encode(snapc_seq, bl);
-  encode(state, bl);
-  op->exec("rbd", "assert_snapc_seq", bl);
-}
-
 void mirror_uuid_get_start(librados::ObjectReadOperation *op) {
   bufferlist bl;
   op->exec("rbd", "mirror_uuid_get", bl);
index aa9bb2b09e09608fa8fcc8e740ffcef55bc6c41c..5bc43fca8836bf864cb6705f5969579bc4f977aa 100644 (file)
@@ -12,6 +12,7 @@
 
 class Context;
 namespace ceph { template <uint8_t> class BitVector; }
+namespace neorados { struct WriteOp; }
 
 namespace librbd {
 namespace cls_client {
@@ -626,17 +627,24 @@ int namespace_list(librados::IoCtx *ioctx,
                    std::list<std::string> *entries);
 
 // operations on data objects
-int assert_snapc_seq(librados::IoCtx *ioctx, const std::string &oid,
-                     uint64_t snapc_seq,
-                     cls::rbd::AssertSnapcSeqState state);
+void assert_snapc_seq(neorados::WriteOp* op,
+                      uint64_t snapc_seq,
+                      cls::rbd::AssertSnapcSeqState state);
 void assert_snapc_seq(librados::ObjectWriteOperation *op,
                       uint64_t snapc_seq,
                       cls::rbd::AssertSnapcSeqState state);
+int assert_snapc_seq(librados::IoCtx *ioctx, const std::string &oid,
+                     uint64_t snapc_seq,
+                     cls::rbd::AssertSnapcSeqState state);
 
+void copyup(neorados::WriteOp* op, ceph::buffer::list data);
 void copyup(librados::ObjectWriteOperation *op, ceph::buffer::list data);
 int copyup(librados::IoCtx *ioctx, const std::string &oid,
            ceph::buffer::list data);
 
+void sparse_copyup(neorados::WriteOp* op,
+                   const std::map<uint64_t, uint64_t> &extent_map,
+                   ceph::buffer::list data);
 void sparse_copyup(librados::ObjectWriteOperation *op,
                    const std::map<uint64_t, uint64_t> &extent_map,
                    ceph::buffer::list data);
index 59a75b030f4dea4ca9070c6a6651ed87fe15e0c9..74c5804e7367b39b1e34713589804e907b70f17e 100644 (file)
@@ -5,6 +5,7 @@ add_executable(ceph_test_cls_rbd
 target_link_libraries(ceph_test_cls_rbd
   cls_rbd_client
   cls_lock_client
+  libneorados
   librados
   global
   ${UNITTEST_LIBS}
index 2a185f05204dda7830ec3476fd24a61c363ebc9e..cf069e8f58b408b6ff4fc847319554cdd58f082e 100644 (file)
@@ -54,10 +54,13 @@ set(rbd_srcs
 add_executable(rbd ${rbd_srcs}
   $<TARGET_OBJECTS:common_texttable_obj>)
 set_target_properties(rbd PROPERTIES OUTPUT_NAME rbd)
-target_link_libraries(rbd librbd librados
-  cls_journal_client cls_rbd_client
+target_link_libraries(rbd librbd
+  cls_journal_client
+  cls_rbd_client
   rbd_types
   journal
+  libneorados
+  librados
   ceph-common global ${CURSES_LIBRARIES}
   ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS})
 if(WITH_KRBD)