]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: helper method to create new data pool IOContext
authorJason Dillaman <dillaman@redhat.com>
Thu, 3 Sep 2020 17:33:42 +0000 (13:33 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 18 Sep 2020 03:52:32 +0000 (23:52 -0400)
Deep-copy will require the ability to issue IOs against arbitrary
IOContexts via the image-extent IO dispatcher.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/ImageCtx.cc
src/librbd/ImageCtx.h
src/test/librbd/mock/MockImageCtx.cc
src/test/librbd/mock/MockImageCtx.h

index 8d88e03d7b73bbec3f012ab3bb64874e40baf660..c1f19aa209db82ba13b3154ea9a5baf1e071bda3 100644 (file)
@@ -924,6 +924,11 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
     return atomic_load(&data_io_context);
   }
 
+  IOContext ImageCtx::duplicate_data_io_context() const {
+    auto ctx = get_data_io_context();
+    return std::make_shared<neorados::IOContext>(*ctx);
+  }
+
   void ImageCtx::get_timer_instance(CephContext *cct, SafeTimer **timer,
                                     ceph::mutex **timer_lock) {
     auto safe_timer_singleton =
index c8c3caf97aba5e1d1884fa6af154c1494da19ef4..cca02cc0125f38a4a4ba795b4811545dde111a11 100644 (file)
@@ -352,6 +352,7 @@ namespace librbd {
 
     void rebuild_data_io_context();
     IOContext get_data_io_context() const;
+    IOContext duplicate_data_io_context() const;
 
     static void get_timer_instance(CephContext *cct, SafeTimer **timer,
                                    ceph::mutex **timer_lock);
index a2670f896dc785981247235536d87f0d8cab0fa2..9c7bf951fc9700c76bf446868c1d49979e9b0393 100644 (file)
@@ -45,4 +45,8 @@ IOContext MockImageCtx::get_data_io_context() {
   return ctx;
 }
 
+IOContext MockImageCtx::duplicate_data_io_context() {
+  return std::make_shared<neorados::IOContext>(*get_data_io_context());
+}
+
 } // namespace librbd
index d7346eb7e79424a6e6727e67ca31c2c911e9271d..e8207510a7577166df55fd9106ce32e616b123b0 100644 (file)
@@ -222,6 +222,7 @@ struct MockImageCtx {
 
   MOCK_METHOD0(rebuild_data_io_context, void());
   IOContext get_data_io_context();
+  IOContext duplicate_data_io_context();
 
   static void set_timer_instance(MockSafeTimer *timer, ceph::mutex *timer_lock);
   static void get_timer_instance(CephContext *cct, MockSafeTimer **timer,