From 526643826246fa8dbe35ea2f65bf9ad0ef9566ff Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Tue, 24 Oct 2023 16:48:06 -0400 Subject: [PATCH] rgw: fetch_remote_obj() uses uncompressed size for encrypted objects use the original size from RGW_ATTR_COMPRESSION as the accounted size in the bucket index for objects that were transferred in their encrypted/compressed form Fixes: https://tracker.ceph.com/issues/63306 Signed-off-by: Casey Bodley --- src/rgw/driver/rados/rgw_rados.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index b72bf3a856b..b935610f9ad 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -4293,6 +4293,20 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx, cs_info.blocks = std::move(compressor->get_compression_blocks()); encode(cs_info, tmp); cb.get_attrs()[RGW_ATTR_COMPRESSION] = tmp; + } else if (auto c = cb.get_attrs().find(RGW_ATTR_COMPRESSION); + c != cb.get_attrs().end()) { + // if the object was transferred in its compressed+encrypted form, use its + // original uncompressed size + try { + RGWCompressionInfo info; + auto p = c->second.cbegin(); + decode(info, p); + accounted_size = info.orig_size; + } catch (const buffer::error&) { + ldpp_dout(rctx.dpp, 0) << "ERROR: could not decode compression attr for " + "replicated object " << dest_obj << dendl; + // decode error isn't fatal, but we might put the wrong size in the index + } } if (override_owner) { -- 2.39.5