From: Casey Bodley Date: Wed, 28 Jun 2023 20:49:33 +0000 (-0400) Subject: rgw: BlockDecrypt filter parses manifest parts before construction X-Git-Tag: v18.2.1~361^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f82d6b824d60719ee17d32d51ba2f1d862437d37;p=ceph.git 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 --- diff --git a/src/rgw/rgw_crypt.cc b/src/rgw/rgw_crypt.cc index e4fd06168557..6ac2d12df47e 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