From 15a2b5c046062f21b2e8a171bca0731c388900b4 Mon Sep 17 00:00:00 2001 From: Or Ozeri Date: Thu, 25 Nov 2021 21:03:02 +0200 Subject: [PATCH] librbd: remove remap_to_* and image crypto layer 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 --- src/librbd/CMakeLists.txt | 1 - src/librbd/ImageCtx.cc | 8 ++ src/librbd/ImageCtx.h | 1 + src/librbd/crypto/CryptoImageDispatch.cc | 49 -------- src/librbd/crypto/CryptoImageDispatch.h | 111 ------------------ src/librbd/crypto/ShutDownCryptoRequest.cc | 29 ----- src/librbd/crypto/ShutDownCryptoRequest.h | 2 - src/librbd/crypto/Utils.cc | 3 - src/librbd/io/ImageDispatcher.cc | 27 ----- src/librbd/io/ImageDispatcher.h | 3 - src/librbd/io/ImageDispatcherInterface.h | 3 - src/librbd/io/Types.h | 1 - src/librbd/io/Utils.cc | 49 ++++++-- .../crypto/test_mock_CryptoObjectDispatch.cc | 16 --- .../crypto/test_mock_ShutDownCryptoRequest.cc | 54 +-------- src/test/librbd/mock/MockImageCtx.cc | 7 ++ src/test/librbd/mock/MockImageCtx.h | 1 + src/test/librbd/mock/io/MockImageDispatcher.h | 3 - 18 files changed, 54 insertions(+), 314 deletions(-) delete mode 100644 src/librbd/crypto/CryptoImageDispatch.cc delete mode 100644 src/librbd/crypto/CryptoImageDispatch.h diff --git a/src/librbd/CMakeLists.txt b/src/librbd/CMakeLists.txt index 1d699b6f4b370..2ba8e5d9f72d6 100644 --- a/src/librbd/CMakeLists.txt +++ b/src/librbd/CMakeLists.txt @@ -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 diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 01b7847c0861f..f4cd7e5f75d5f 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -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(*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}; diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index 9a432c764d542..0f6f742fcbd9d 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -342,6 +342,7 @@ namespace librbd { ObjectMap *create_object_map(uint64_t snap_id); Journal *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 index 4d4c360dc5ef9..0000000000000 --- a/src/librbd/crypto/CryptoImageDispatch.cc +++ /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 index 3ce658981d0a2..0000000000000 --- a/src/librbd/crypto/CryptoImageDispatch.h +++ /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* 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* 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* 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* 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* 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* 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* 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 diff --git a/src/librbd/crypto/ShutDownCryptoRequest.cc b/src/librbd/crypto/ShutDownCryptoRequest.cc index fb1e774796858..bc45a7ff9416d 100644 --- a/src/librbd/crypto/ShutDownCryptoRequest.cc +++ b/src/librbd/crypto/ShutDownCryptoRequest.cc @@ -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::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 -void ShutDownCryptoRequest::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, - &ShutDownCryptoRequest::handle_shut_down_image_dispatch>(this); - m_image_ctx->io_image_dispatcher->shut_down_dispatch( - io::IMAGE_DISPATCH_LAYER_CRYPTO, ctx); -} - -template -void ShutDownCryptoRequest::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); } diff --git a/src/librbd/crypto/ShutDownCryptoRequest.h b/src/librbd/crypto/ShutDownCryptoRequest.h index 27422857408f1..5c42640e87485 100644 --- a/src/librbd/crypto/ShutDownCryptoRequest.h +++ b/src/librbd/crypto/ShutDownCryptoRequest.h @@ -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: diff --git a/src/librbd/crypto/Utils.cc b/src/librbd/crypto/Utils.cc index 981ad47b01d56..80facb30c4623 100644 --- a/src/librbd/crypto/Utils.cc +++ b/src/librbd/crypto/Utils.cc @@ -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::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); } diff --git a/src/librbd/io/ImageDispatcher.cc b/src/librbd/io/ImageDispatcher.cc index 4aa7929b2eba7..577c1d990d872 100644 --- a/src/librbd/io/ImageDispatcher.cc +++ b/src/librbd/io/ImageDispatcher.cc @@ -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::wait_on_writes_unblocked(Context *on_unblocked) { m_write_block_dispatch->wait_on_writes_unblocked(on_unblocked); } -template -void ImageDispatcher::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( - it->second.dispatch); - crypto_image_dispatch->remap_to_physical(image_extents, area); -} - -template -ImageArea ImageDispatcher::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( - it->second.dispatch); - return crypto_image_dispatch->remap_to_logical(image_extents); -} - template bool ImageDispatcher::send_dispatch( ImageDispatchInterface* image_dispatch, diff --git a/src/librbd/io/ImageDispatcher.h b/src/librbd/io/ImageDispatcher.h index 5d5fb053521be..7e242d48ec0e6 100644 --- a/src/librbd/io/ImageDispatcher.h +++ b/src/librbd/io/ImageDispatcher.h @@ -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, diff --git a/src/librbd/io/ImageDispatcherInterface.h b/src/librbd/io/ImageDispatcherInterface.h index dcff3d96acd48..9585f9e8250d3 100644 --- a/src/librbd/io/ImageDispatcherInterface.h +++ b/src/librbd/io/ImageDispatcherInterface.h @@ -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 diff --git a/src/librbd/io/Types.h b/src/librbd/io/Types.h index 7c70986c5846a..ad032a8533458 100644 --- a/src/librbd/io/Types.h +++ b/src/librbd/io/Types.h @@ -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 }; diff --git a/src/librbd/io/Utils.cc b/src/librbd/io/Utils.cc index 63d5872061367..86a48504fcf11 100644 --- a/src/librbd/io/Utils.cc +++ b/src/librbd/io/Utils.cc @@ -187,12 +187,9 @@ template 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 @@ -203,24 +200,50 @@ std::pair 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 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 std::pair 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 diff --git a/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc b/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc index bfd29261628bd..0c69f3f1d5d2c 100644 --- a/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc +++ b/src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc @@ -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)); diff --git a/src/test/librbd/crypto/test_mock_ShutDownCryptoRequest.cc b/src/test/librbd/crypto/test_mock_ShutDownCryptoRequest.cc index 7df99b78ac9ef..3cd7a6d931c4b 100644 --- a/src/test/librbd/crypto/test_mock_ShutDownCryptoRequest.cc +++ b/src/test/librbd/crypto/test_mock_ShutDownCryptoRequest.cc @@ -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()); diff --git a/src/test/librbd/mock/MockImageCtx.cc b/src/test/librbd/mock/MockImageCtx.cc index 3613c6e60d611..52e8e2b434916 100644 --- a/src/test/librbd/mock/MockImageCtx.cc +++ b/src/test/librbd/mock/MockImageCtx.cc @@ -146,4 +146,11 @@ IOContext MockImageCtx::duplicate_data_io_context() { return std::make_shared(*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 diff --git a/src/test/librbd/mock/MockImageCtx.h b/src/test/librbd/mock/MockImageCtx.h index 8da257f44ab0e..bf45e7dd92cd3 100644 --- a/src/test/librbd/mock/MockImageCtx.h +++ b/src/test/librbd/mock/MockImageCtx.h @@ -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, diff --git a/src/test/librbd/mock/io/MockImageDispatcher.h b/src/test/librbd/mock/io/MockImageDispatcher.h index 92cddd501f2dc..4c0bfb01c4f21 100644 --- a/src/test/librbd/mock/io/MockImageDispatcher.h +++ b/src/test/librbd/mock/io/MockImageDispatcher.h @@ -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 -- 2.39.5