From d8a82f5aaa1a04b695c19b546767718b832559cb Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 28 Jun 2023 16:49:33 -0400 Subject: [PATCH] rgw: BlockDecrypt filter parses manifest parts before construction users now call a static read_manifest_parts() function, and pass the resulting vector into the BlockDecrypt constructor Signed-off-by: Casey Bodley --- src/rgw/rgw_crypt.cc | 16 ++++---- src/rgw/rgw_crypt.h | 8 ++-- src/rgw/rgw_rest_s3.cc | 68 +++++++++++++++++++-------------- src/test/rgw/test_rgw_crypto.cc | 64 +++++++++++++++---------------- 4 files changed, 85 insertions(+), 71 deletions(-) diff --git a/src/rgw/rgw_crypt.cc b/src/rgw/rgw_crypt.cc index d2c3edb0d55a9..9fdd9819ea177 100644 --- a/src/rgw/rgw_crypt.cc +++ b/src/rgw/rgw_crypt.cc @@ -661,6 +661,7 @@ RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp, CephContext* cct, RGWGetObj_Filter* next, std::unique_ptr crypt, + std::vector parts_len, optional_yield y) : RGWGetObj_Filter(next), @@ -671,7 +672,8 @@ RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp, ofs(0), end(0), cache(), - y(y) + y(y), + parts_len(std::move(parts_len)) { block_size = this->crypt->get_block_size(); } @@ -679,8 +681,10 @@ RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp, RGWGetObj_BlockDecrypt::~RGWGetObj_BlockDecrypt() { } -int RGWGetObj_BlockDecrypt::read_manifest(const DoutPrefixProvider *dpp, bufferlist& manifest_bl) { - parts_len.clear(); +int RGWGetObj_BlockDecrypt::read_manifest_parts(const DoutPrefixProvider *dpp, + const bufferlist& manifest_bl, + std::vector& parts_len) +{ RGWObjManifest manifest; if (manifest_bl.length()) { auto miter = manifest_bl.cbegin(); @@ -697,10 +701,8 @@ int RGWGetObj_BlockDecrypt::read_manifest(const DoutPrefixProvider *dpp, bufferl } parts_len.back() += mi.get_stripe_size(); } - if (cct->_conf->subsys.should_gather()) { - for (size_t i = 0; i