]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: remove remap_to_* and image crypto layer 43804/head
authorOr Ozeri <oro@il.ibm.com>
Thu, 25 Nov 2021 19:03:02 +0000 (21:03 +0200)
committerOr Ozeri <oro@il.ibm.com>
Tue, 5 Sep 2023 12:21:10 +0000 (15:21 +0300)
This commit removes the crypto image dispatch layer.
Instead, data offset calculation is taken from ImageCtx->encryption_format.
This change makes the remap_to_* api unnecessary, so it is removed.

Signed-off-by: Or Ozeri <oro@il.ibm.com>
18 files changed:
src/librbd/CMakeLists.txt
src/librbd/ImageCtx.cc
src/librbd/ImageCtx.h
src/librbd/crypto/CryptoImageDispatch.cc [deleted file]
src/librbd/crypto/CryptoImageDispatch.h [deleted file]
src/librbd/crypto/ShutDownCryptoRequest.cc
src/librbd/crypto/ShutDownCryptoRequest.h
src/librbd/crypto/Utils.cc
src/librbd/io/ImageDispatcher.cc
src/librbd/io/ImageDispatcher.h
src/librbd/io/ImageDispatcherInterface.h
src/librbd/io/Types.h
src/librbd/io/Utils.cc
src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc
src/test/librbd/crypto/test_mock_ShutDownCryptoRequest.cc
src/test/librbd/mock/MockImageCtx.cc
src/test/librbd/mock/MockImageCtx.h
src/test/librbd/mock/io/MockImageDispatcher.h

index 1d699b6f4b370f45ecd8152ea1310623aff69b4b..2ba8e5d9f72d6a3107c786fb41e9914570cc1080 100644 (file)
@@ -58,7 +58,6 @@ set(librbd_internal_srcs
   cache/WriteAroundObjectDispatch.cc
   crypto/BlockCrypto.cc
   crypto/CryptoContextPool.cc
-  crypto/CryptoImageDispatch.cc
   crypto/CryptoObjectDispatch.cc
   crypto/FormatRequest.cc
   crypto/LoadRequest.cc
index 01b7847c0861f6e29a79132ca75be14e16583d1f..f4cd7e5f75d5f3af73d302d5412f23395909022e 100644 (file)
@@ -30,6 +30,7 @@
 #include "librbd/exclusive_lock/AutomaticPolicy.h"
 #include "librbd/exclusive_lock/StandardPolicy.h"
 #include "librbd/crypto/EncryptionFormat.h"
+#include "librbd/crypto/CryptoInterface.h"
 #include "librbd/io/AioCompletion.h"
 #include "librbd/io/AsyncOperation.h"
 #include "librbd/io/ImageDispatcher.h"
@@ -945,6 +946,13 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
     return new Journal<ImageCtx>(*this);
   }
 
+  uint64_t ImageCtx::get_data_offset() const {
+    if (encryption_format != nullptr) {
+      return encryption_format->get_crypto()->get_data_offset();
+    }
+    return 0;
+  }
+
   void ImageCtx::set_image_name(const std::string &image_name) {
     // update the name so rename can be invoked repeatedly
     std::shared_lock owner_locker{owner_lock};
index 9a432c764d542f489cf6dd0faabafa8e3906e86c..0f6f742fcbd9da2f1348a15ba2b03a9dc2470638 100644 (file)
@@ -342,6 +342,7 @@ namespace librbd {
     ObjectMap<ImageCtx> *create_object_map(uint64_t snap_id);
     Journal<ImageCtx> *create_journal();
 
+    uint64_t get_data_offset() const;
     void set_image_name(const std::string &name);
 
     void notify_update();
diff --git a/src/librbd/crypto/CryptoImageDispatch.cc b/src/librbd/crypto/CryptoImageDispatch.cc
deleted file mode 100644 (file)
index 4d4c360..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "librbd/crypto/CryptoImageDispatch.h"
-
-namespace librbd {
-namespace crypto {
-
-CryptoImageDispatch::CryptoImageDispatch(
-        uint64_t data_offset) : m_data_offset(data_offset) {
-}
-
-void CryptoImageDispatch::remap_to_physical(io::Extents& image_extents,
-                                            io::ImageArea area) {
-  switch (area) {
-  case io::ImageArea::DATA:
-    for (auto& [off, _] : image_extents) {
-      off += m_data_offset;
-    }
-    break;
-  case io::ImageArea::CRYPTO_HEADER:
-    // direct mapping
-    break;
-  default:
-    ceph_abort();
-  }
-}
-
-io::ImageArea CryptoImageDispatch::remap_to_logical(
-    io::Extents& image_extents) {
-  bool saw_data = false;
-  bool saw_crypto_header = false;
-  for (auto& [off, _] : image_extents) {
-    if (off >= m_data_offset) {
-      off -= m_data_offset;
-      saw_data = true;
-    } else {
-      saw_crypto_header = true;
-    }
-  }
-  if (saw_crypto_header) {
-    ceph_assert(!saw_data);
-    return io::ImageArea::CRYPTO_HEADER;
-  }
-  return io::ImageArea::DATA;
-}
-
-} // namespace crypto
-} // namespace librbd
diff --git a/src/librbd/crypto/CryptoImageDispatch.h b/src/librbd/crypto/CryptoImageDispatch.h
deleted file mode 100644 (file)
index 3ce6589..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#ifndef CEPH_LIBRBD_CRYPTO_CRYPTO_IMAGE_DISPATCH_H
-#define CEPH_LIBRBD_CRYPTO_CRYPTO_IMAGE_DISPATCH_H
-
-#include "librbd/io/ImageDispatchInterface.h"
-
-namespace librbd {
-namespace crypto {
-
-class CryptoImageDispatch : public io::ImageDispatchInterface {
-public:
-  static CryptoImageDispatch* create(uint64_t data_offset) {
-    return new CryptoImageDispatch(data_offset);
-  }
-  CryptoImageDispatch(uint64_t data_offset);
-
-  io::ImageDispatchLayer get_dispatch_layer() const override {
-    return io::IMAGE_DISPATCH_LAYER_CRYPTO;
-  }
-
-  void shut_down(Context* on_finish) override {
-    on_finish->complete(0);
-  }
-
-  bool read(
-      io::AioCompletion* aio_comp, io::Extents &&image_extents,
-      io::ReadResult &&read_result, IOContext io_context, int op_flags,
-      int read_flags, const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool write(
-      io::AioCompletion* aio_comp, io::Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace,
-      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool discard(
-      io::AioCompletion* aio_comp, io::Extents &&image_extents,
-      uint32_t discard_granularity_bytes, const ZTracer::Trace &parent_trace,
-      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool write_same(
-      io::AioCompletion* aio_comp, io::Extents &&image_extents, bufferlist &&bl,
-      int op_flags, const ZTracer::Trace &parent_trace,
-      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool compare_and_write(
-      io::AioCompletion* aio_comp, io::Extents &&image_extents,
-      bufferlist &&cmp_bl, bufferlist &&bl, uint64_t *mismatch_offset,
-      int op_flags, const ZTracer::Trace &parent_trace,
-      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool flush(
-      io::AioCompletion* aio_comp, io::FlushSource flush_source,
-      const ZTracer::Trace &parent_trace, uint64_t tid,
-      std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool list_snaps(
-      io::AioCompletion* aio_comp, io::Extents&& image_extents,
-      io::SnapIds&& snap_ids, int list_snaps_flags,
-      io::SnapshotDelta* snapshot_delta, const ZTracer::Trace &parent_trace,
-      uint64_t tid, std::atomic<uint32_t>* image_dispatch_flags,
-      io::DispatchResult* dispatch_result, Context** on_finish,
-      Context* on_dispatched) override {
-    return false;
-  }
-
-  bool invalidate_cache(Context* on_finish) override {
-    return false;
-  }
-
-  // called directly by ImageDispatcher
-  // TODO: hoist these out and remove CryptoImageDispatch since it's
-  // just a placeholder
-  void remap_to_physical(io::Extents& image_extents, io::ImageArea area);
-  io::ImageArea remap_to_logical(io::Extents& image_extents);
-
-private:
-  uint64_t m_data_offset;
-
-};
-
-} // namespace crypto
-} // namespace librbd
-
-#endif // CEPH_LIBRBD_CRYPTO_CRYPTO_IMAGE_DISPATCH_H
index fb1e7747968586ca27a1f287613b9b9033598dc1..bc45a7ff9416d154a2d98de1aa83033149993c7a 100644 (file)
@@ -6,7 +6,6 @@
 #include "common/dout.h"
 #include "common/errno.h"
 #include "librbd/Utils.h"
-#include "librbd/crypto/CryptoImageDispatch.h"
 #include "librbd/crypto/CryptoObjectDispatch.h"
 #include "librbd/crypto/EncryptionFormat.h"
 #include "librbd/io/ImageDispatcherInterface.h"
@@ -55,36 +54,8 @@ void ShutDownCryptoRequest<I>::handle_shut_down_object_dispatch(int r) {
   if (r < 0) {
     lderr(m_image_ctx->cct) << "failed to shut down object dispatch: "
                             << cpp_strerror(r) << dendl;
-    finish(r);
-    return;
   }
 
-  shut_down_image_dispatch();
-}
-
-template <typename I>
-void ShutDownCryptoRequest<I>::shut_down_image_dispatch() {
-  if (!m_image_ctx->io_image_dispatcher->exists(
-          io::IMAGE_DISPATCH_LAYER_CRYPTO)) {
-    finish(0);
-    return;
-  }
-
-  auto ctx = create_context_callback<
-        ShutDownCryptoRequest<I>,
-        &ShutDownCryptoRequest<I>::handle_shut_down_image_dispatch>(this);
-  m_image_ctx->io_image_dispatcher->shut_down_dispatch(
-          io::IMAGE_DISPATCH_LAYER_CRYPTO, ctx);
-}
-
-template <typename I>
-void ShutDownCryptoRequest<I>::handle_shut_down_image_dispatch(int r) {
-  ldout(m_image_ctx->cct, 20) << "r=" << r << dendl;
-
-  if (r < 0) {
-    lderr(m_image_ctx->cct) << "failed to shut down image dispatch: "
-                            << cpp_strerror(r) << dendl;
-  }
   finish(r);
 }
 
index 27422857408f109e2a6cec4145c664ad49e3bf75..5c42640e874851172bb5108d380dc7eda929b8f9 100644 (file)
@@ -26,8 +26,6 @@ public:
     void send();
     void shut_down_object_dispatch();
     void handle_shut_down_object_dispatch(int r);
-    void shut_down_image_dispatch();
-    void handle_shut_down_image_dispatch(int r);
     void finish(int r);
 
 private:
index 981ad47b01d56d83cde9e61c76a994bdabe16a6e..80facb30c4623aca7e1e8d3dd486bd8c0c5f9f09 100644 (file)
@@ -7,7 +7,6 @@
 #include "common/errno.h"
 #include "librbd/ImageCtx.h"
 #include "librbd/crypto/BlockCrypto.h"
-#include "librbd/crypto/CryptoImageDispatch.h"
 #include "librbd/crypto/CryptoInterface.h"
 #include "librbd/crypto/CryptoObjectDispatch.h"
 #include "librbd/crypto/EncryptionFormat.h"
@@ -32,9 +31,7 @@ void set_crypto(I *image_ctx,
   auto crypto = encryption_format->get_crypto();
 
   auto object_dispatch = CryptoObjectDispatch<I>::create(image_ctx, crypto);
-  auto image_dispatch = CryptoImageDispatch::create(crypto->get_data_offset());
   image_ctx->io_object_dispatcher->register_dispatch(object_dispatch);
-  image_ctx->io_image_dispatcher->register_dispatch(image_dispatch);
 
   image_ctx->encryption_format = std::move(encryption_format);
 }
index 4aa7929b2eba7ccb128e99385fdc141764633cd5..577c1d990d8729168d8d93d7fd05c12ad432a58b 100644 (file)
@@ -6,7 +6,6 @@
 #include "common/AsyncOpTracker.h"
 #include "common/dout.h"
 #include "librbd/ImageCtx.h"
-#include "librbd/crypto/CryptoImageDispatch.h"
 #include "librbd/io/ImageDispatch.h"
 #include "librbd/io/ImageDispatchInterface.h"
 #include "librbd/io/ImageDispatchSpec.h"
@@ -266,32 +265,6 @@ void ImageDispatcher<I>::wait_on_writes_unblocked(Context *on_unblocked) {
   m_write_block_dispatch->wait_on_writes_unblocked(on_unblocked);
 }
 
-template <typename I>
-void ImageDispatcher<I>::remap_to_physical(Extents& image_extents,
-                                           ImageArea area) {
-  std::shared_lock locker{this->m_lock};
-  auto it = this->m_dispatches.find(IMAGE_DISPATCH_LAYER_CRYPTO);
-  if (it == this->m_dispatches.end()) {
-    ceph_assert(area == ImageArea::DATA);
-    return;
-  }
-  auto crypto_image_dispatch = static_cast<crypto::CryptoImageDispatch*>(
-      it->second.dispatch);
-  crypto_image_dispatch->remap_to_physical(image_extents, area);
-}
-
-template <typename I>
-ImageArea ImageDispatcher<I>::remap_to_logical(Extents& image_extents) {
-  std::shared_lock locker{this->m_lock};
-  auto it = this->m_dispatches.find(IMAGE_DISPATCH_LAYER_CRYPTO);
-  if (it == this->m_dispatches.end()) {
-    return ImageArea::DATA;
-  }
-  auto crypto_image_dispatch = static_cast<crypto::CryptoImageDispatch*>(
-      it->second.dispatch);
-  return crypto_image_dispatch->remap_to_logical(image_extents);
-}
-
 template <typename I>
 bool ImageDispatcher<I>::send_dispatch(
     ImageDispatchInterface* image_dispatch,
index 5d5fb053521beed4d6c9fc645e05e8c788daa495..7e242d48ec0e6cb4753faf25f9511c4b32db2120 100644 (file)
@@ -46,9 +46,6 @@ public:
   void unblock_writes() override;
   void wait_on_writes_unblocked(Context *on_unblocked) override;
 
-  void remap_to_physical(Extents& image_extents, ImageArea area) override;
-  ImageArea remap_to_logical(Extents& image_extents) override;
-
 protected:
   bool send_dispatch(
     ImageDispatchInterface* image_dispatch,
index dcff3d96acd487f9abbcdf17fcc060834177edcc..9585f9e8250d3773408dc81db14a48025ea457ed 100644 (file)
@@ -30,9 +30,6 @@ public:
   virtual void wait_on_writes_unblocked(Context *on_unblocked) = 0;
 
   virtual void invalidate_cache(Context* on_finish) = 0;
-
-  virtual void remap_to_physical(Extents& image_extents, ImageArea area) = 0;
-  virtual ImageArea remap_to_logical(Extents& image_extents) = 0;
 };
 
 } // namespace io
index 7c70986c5846aada3c65dbe19a3c70fc8bea8fb1..ad032a85334584f47fa86bfcfb3836122f6bb55f 100644 (file)
@@ -66,7 +66,6 @@ enum ImageDispatchLayer {
   IMAGE_DISPATCH_LAYER_JOURNAL,
   IMAGE_DISPATCH_LAYER_WRITE_BLOCK,
   IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE,
-  IMAGE_DISPATCH_LAYER_CRYPTO,
   IMAGE_DISPATCH_LAYER_CORE,
   IMAGE_DISPATCH_LAYER_LAST
 };
index 63d5872061367d377afe7ad3554c124a23c35252..86a48504fcf11f6000aa82190bfce1332ca395b5 100644 (file)
@@ -187,12 +187,9 @@ template <typename I>
 void area_to_object_extents(I* image_ctx, uint64_t offset, uint64_t length,
                             ImageArea area, uint64_t buffer_offset,
                             striper::LightweightObjectExtents* object_extents) {
-  Extents extents = {{offset, length}};
-  image_ctx->io_image_dispatcher->remap_to_physical(extents, area);
-  for (auto [off, len] : extents) {
-    Striper::file_to_extents(image_ctx->cct, &image_ctx->layout, off, len, 0,
-                             buffer_offset, object_extents);
-  }
+  offset = area_to_raw_offset(*image_ctx, offset, area);
+  Striper::file_to_extents(image_ctx->cct, &image_ctx->layout, offset, length,
+                           0, buffer_offset, object_extents);
 }
 
 template <typename I>
@@ -203,24 +200,50 @@ std::pair<Extents, ImageArea> object_to_area_extents(
     Striper::extent_to_file(image_ctx->cct, &image_ctx->layout, object_no, off,
                             len, extents);
   }
-  auto area = image_ctx->io_image_dispatcher->remap_to_logical(extents);
+
+  auto area = ImageArea::DATA;
+  uint64_t data_offset = image_ctx->get_data_offset();
+  bool saw_data = false;
+  bool saw_crypto_header = false;
+  for (auto& [off, _] : extents) {
+    if (off >= data_offset) {
+      off -= data_offset;
+      saw_data = true;
+    } else {
+      saw_crypto_header = true;
+    }
+  }
+  if (saw_crypto_header) {
+    ceph_assert(!saw_data);
+    area = ImageArea::CRYPTO_HEADER;
+  }
+
   return {std::move(extents), area};
 }
 
 template <typename I>
 uint64_t area_to_raw_offset(const I& image_ctx, uint64_t offset,
                             ImageArea area) {
-  Extents extents = {{offset, 0}};
-  image_ctx.io_image_dispatcher->remap_to_physical(extents, area);
-  return extents[0].first;
+  switch (area) {
+  case ImageArea::DATA:
+    return offset + image_ctx.get_data_offset();
+  case ImageArea::CRYPTO_HEADER:
+    // direct mapping
+    ceph_assert(image_ctx.get_data_offset() != 0);
+    return offset;
+  default:
+    ceph_abort();
+  }
 }
 
 template <typename I>
 std::pair<uint64_t, ImageArea> raw_to_area_offset(const I& image_ctx,
                                                   uint64_t offset) {
-  Extents extents = {{offset, 0}};
-  auto area = image_ctx.io_image_dispatcher->remap_to_logical(extents);
-  return {extents[0].first, area};
+  uint64_t data_offset = image_ctx.get_data_offset();
+  if (offset >= data_offset) {
+    return {offset - data_offset, ImageArea::DATA};
+  }
+  return {offset, ImageArea::CRYPTO_HEADER};
 }
 
 } // namespace util
index bfd29261628bdc25a317c0ed09d6602d93b938c7..0c69f3f1d5d2c0ffffa358cbc21b6476b7f1ddb4 100644 (file)
@@ -225,11 +225,6 @@ struct TestMockCryptoCryptoObjectDispatch : public TestMockFixture {
             mock_image_ctx->layout.object_size));
   }
 
-  void expect_remap_to_logical(uint64_t offset, uint64_t length) {
-    EXPECT_CALL(*mock_image_ctx->io_image_dispatcher, remap_to_logical(
-            ElementsAre(Pair(offset, length))));
-  }
-
   void expect_get_parent_overlap(uint64_t overlap) {
     EXPECT_CALL(*mock_image_ctx, get_parent_overlap(_, _))
             .WillOnce(WithArg<1>(Invoke([overlap](uint64_t *o) {
@@ -517,8 +512,6 @@ TEST_F(TestMockCryptoCryptoObjectDispatch, UnalignedWriteCopyup) {
 
   expect_get_object_size();
   expect_get_parent_overlap(100 << 20);
-  expect_remap_to_logical(11 * mock_image_ctx->layout.object_size,
-                          mock_image_ctx->layout.object_size);
   expect_prune_parent_extents(mock_image_ctx->layout.object_size);
   EXPECT_CALL(mock_exclusive_lock, is_lock_owner()).WillRepeatedly(
           Return(true));
@@ -563,8 +556,6 @@ TEST_F(TestMockCryptoCryptoObjectDispatch, UnalignedWriteEmptyCopyup) {
 
   expect_get_object_size();
   expect_get_parent_overlap(100 << 20);
-  expect_remap_to_logical(11 * mock_image_ctx->layout.object_size,
-                          mock_image_ctx->layout.object_size);
   expect_prune_parent_extents(mock_image_ctx->layout.object_size);
   EXPECT_CALL(mock_exclusive_lock, is_lock_owner()).WillRepeatedly(
           Return(true));
@@ -753,13 +744,6 @@ TEST_F(TestMockCryptoCryptoObjectDispatch, PrepareCopyup) {
   expect_get_object_size();
   expect_encrypt(6);
   InSequence seq;
-  uint64_t base = 11 * mock_image_ctx->layout.object_size;
-  expect_remap_to_logical(base, 4096);
-  expect_remap_to_logical(base + 4096, 4096);
-  expect_remap_to_logical(base + 8192, 4096);
-  expect_remap_to_logical(base, 4096);
-  expect_remap_to_logical(base + 4096, 8192);
-  expect_remap_to_logical(base + 16384, 4096);
   ASSERT_EQ(0, mock_crypto_object_dispatch->prepare_copyup(
       11, &snapshot_sparse_bufferlist));
 
index 7df99b78ac9efdd85ac1638107a9b5ea33eafc4f..3cd7a6d931c4b7d2060c55db575e104ba1f42a96 100644 (file)
@@ -39,7 +39,6 @@ struct TestMockShutDownCryptoRequest : public TestMockFixture {
   MockShutDownCryptoRequest* mock_shutdown_crypto_request;
   MockEncryptionFormat* mock_encryption_format;
   Context* shutdown_object_dispatch_context;
-  Context* shutdown_image_dispatch_context;
 
   void SetUp() override {
     TestMockFixture::SetUp();
@@ -64,12 +63,6 @@ struct TestMockShutDownCryptoRequest : public TestMockFixture {
             io::OBJECT_DISPATCH_LAYER_CRYPTO)).WillOnce(Return(exists));
   }
 
-  void expect_crypto_image_layer_exists_check(
-          MockTestImageCtx* image_ctx, bool exists) {
-    EXPECT_CALL(*image_ctx->io_image_dispatcher, exists(
-            io::IMAGE_DISPATCH_LAYER_CRYPTO)).WillOnce(Return(exists));
-  }
-
   void expect_shutdown_crypto_object_dispatch(MockTestImageCtx* image_ctx) {
     EXPECT_CALL(*image_ctx->io_object_dispatcher, shut_down_dispatch(
             io::OBJECT_DISPATCH_LAYER_CRYPTO, _)).WillOnce(
@@ -77,14 +70,6 @@ struct TestMockShutDownCryptoRequest : public TestMockFixture {
                       shutdown_object_dispatch_context = ctx;
     })));
   }
-
-  void expect_shutdown_crypto_image_dispatch(MockTestImageCtx* image_ctx) {
-    EXPECT_CALL(*image_ctx->io_image_dispatcher, shut_down_dispatch(
-            io::IMAGE_DISPATCH_LAYER_CRYPTO, _)).WillOnce(
-                    WithArgs<1>(Invoke([this](Context* ctx) {
-                      shutdown_image_dispatch_context = ctx;
-    })));
-  }
 };
 
 TEST_F(TestMockShutDownCryptoRequest, NoCryptoObjectDispatch) {
@@ -104,41 +89,12 @@ TEST_F(TestMockShutDownCryptoRequest, FailShutdownObjectDispatch) {
   ASSERT_EQ(mock_encryption_format, mock_image_ctx->encryption_format.get());
 }
 
-TEST_F(TestMockShutDownCryptoRequest, NoCryptoImageDispatch) {
-  expect_crypto_object_layer_exists_check(mock_image_ctx, true);
-  expect_shutdown_crypto_object_dispatch(mock_image_ctx);
-  mock_shutdown_crypto_request->send();
-  ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  expect_crypto_image_layer_exists_check(mock_image_ctx, false);
-  shutdown_object_dispatch_context->complete(0);
-  ASSERT_EQ(0, finished_cond.wait());
-  ASSERT_EQ(nullptr, mock_image_ctx->encryption_format.get());
-}
-
-TEST_F(TestMockShutDownCryptoRequest, FailShutdownImageDispatch) {
-  expect_crypto_object_layer_exists_check(mock_image_ctx, true);
-  expect_shutdown_crypto_object_dispatch(mock_image_ctx);
-  mock_shutdown_crypto_request->send();
-  ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  expect_crypto_image_layer_exists_check(mock_image_ctx, true);
-  expect_shutdown_crypto_image_dispatch(mock_image_ctx);
-  shutdown_object_dispatch_context->complete(0);
-  ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  shutdown_image_dispatch_context->complete(-EIO);
-  ASSERT_EQ(-EIO, finished_cond.wait());
-  ASSERT_EQ(mock_encryption_format, mock_image_ctx->encryption_format.get());
-}
-
 TEST_F(TestMockShutDownCryptoRequest, Success) {
   expect_crypto_object_layer_exists_check(mock_image_ctx, true);
   expect_shutdown_crypto_object_dispatch(mock_image_ctx);
   mock_shutdown_crypto_request->send();
   ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  expect_crypto_image_layer_exists_check(mock_image_ctx, true);
-  expect_shutdown_crypto_image_dispatch(mock_image_ctx);
   shutdown_object_dispatch_context->complete(0);
-  ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  shutdown_image_dispatch_context->complete(0);
   ASSERT_EQ(0, finished_cond.wait());
   ASSERT_EQ(nullptr, mock_image_ctx->encryption_format.get());
 }
@@ -150,20 +106,12 @@ TEST_F(TestMockShutDownCryptoRequest, ShutdownParent) {
   expect_shutdown_crypto_object_dispatch(mock_image_ctx);
   mock_shutdown_crypto_request->send();
   ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  expect_crypto_image_layer_exists_check(mock_image_ctx, true);
-  expect_shutdown_crypto_image_dispatch(mock_image_ctx);
-  shutdown_object_dispatch_context->complete(0);
-  ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
   expect_crypto_object_layer_exists_check(parent_image_ctx, true);
   expect_shutdown_crypto_object_dispatch(parent_image_ctx);
-  shutdown_image_dispatch_context->complete(0);
-  ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
-  expect_crypto_image_layer_exists_check(parent_image_ctx, true);
-  expect_shutdown_crypto_image_dispatch(parent_image_ctx);
   shutdown_object_dispatch_context->complete(0);
   ASSERT_EQ(ETIMEDOUT, finished_cond.wait_for(0));
   mock_image_ctx->parent = nullptr;
-  shutdown_image_dispatch_context->complete(0);
+  shutdown_object_dispatch_context->complete(0);
   ASSERT_EQ(0, finished_cond.wait());
   ASSERT_EQ(nullptr, mock_image_ctx->encryption_format.get());
   ASSERT_EQ(nullptr, parent_image_ctx->encryption_format.get());
index 3613c6e60d61198f7ef947a92d200d193bff834a..52e8e2b4349162517fc069e57fdd8a4d366cc3ce 100644 (file)
@@ -146,4 +146,11 @@ IOContext MockImageCtx::duplicate_data_io_context() {
   return std::make_shared<neorados::IOContext>(*get_data_io_context());
 }
 
+uint64_t MockImageCtx::get_data_offset() const {
+  if (encryption_format != nullptr) {
+    return encryption_format->get_crypto()->get_data_offset();
+  }
+  return 0;
+}
+
 } // namespace librbd
index 8da257f44ab0e5cf7e781a8a524d7e08b687ec88..bf45e7dd92cd34b6dca733a5ab353726919629c4 100644 (file)
@@ -145,6 +145,7 @@ struct MockImageCtx {
   MOCK_METHOD0(rebuild_data_io_context, void());
   IOContext get_data_io_context();
   IOContext duplicate_data_io_context();
+  uint64_t get_data_offset() const;
 
   static void set_timer_instance(MockSafeTimer *timer, ceph::mutex *timer_lock);
   static void get_timer_instance(CephContext *cct, MockSafeTimer **timer,
index 92cddd501f2dce4f632121d5443af7204a075b15..4c0bfb01c4f2143528278c9412e7c0da5092859e 100644 (file)
@@ -39,9 +39,6 @@ public:
 
   MOCK_METHOD0(unblock_writes, void());
   MOCK_METHOD1(wait_on_writes_unblocked, void(Context*));
-
-  MOCK_METHOD2(remap_to_physical, void(Extents&, ImageArea));
-  MOCK_METHOD1(remap_to_logical, ImageArea(Extents&));
 };
 
 } // namespace io