From f82d6b824d60719ee17d32d51ba2f1d862437d37 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 (cherry picked from commit d8a82f5aaa1a04b695c19b546767718b832559cb) Conflicts: optional_yield argument not on reef src/rgw/rgw_crypt.cc src/rgw/rgw_crypt.h src/rgw/rgw_rest_s3.cc src/test/rgw/test_rgw_crypto.cc --- src/rgw/rgw_crypt.cc | 18 +++++---- src/rgw/rgw_crypt.h | 10 +++-- src/rgw/rgw_rest_s3.cc | 69 +++++++++++++++++++-------------- src/test/rgw/test_rgw_crypto.cc | 60 +++++++++++++--------------- 4 files changed, 83 insertions(+), 74 deletions(-) diff --git a/src/rgw/rgw_crypt.cc b/src/rgw/rgw_crypt.cc index e4fd0616855..6ac2d12df47 100644 --- a/src/rgw/rgw_crypt.cc +++ b/src/rgw/rgw_crypt.cc @@ -635,7 +635,8 @@ bool AES_256_ECB_encrypt(const DoutPrefixProvider* dpp, RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp, CephContext* cct, RGWGetObj_Filter* next, - std::unique_ptr crypt) + std::unique_ptr crypt, + std::vector parts_len) : RGWGetObj_Filter(next), dpp(dpp), @@ -644,7 +645,8 @@ RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp, enc_begin_skip(0), ofs(0), end(0), - cache() + cache(), + parts_len(std::move(parts_len)) { block_size = this->crypt->get_block_size(); } @@ -652,8 +654,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(); @@ -670,10 +674,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