From f8c47d972fff8e478be972b54cc45438d4a9c4be Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 28 Jun 2023 14:57:49 -0400 Subject: [PATCH] rgw: fetch_remote_obj() preserves RGW_ATTR_COMPRESSION of encrypted objects if the source object was both compressed and encrypted, preserve its original compression attribute so it can be decompressed the same way it was originally compressed Signed-off-by: Casey Bodley (cherry picked from commit b91ff3fd86f52f7148daf7f9acc9864752186ce0) --- src/rgw/driver/rados/rgw_rados.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index caf6e70bf17..69323f571a2 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -3393,8 +3393,12 @@ public: try_etag_verify = false; } + // if the object is both compressed and encrypted, it was transferred + // in its encrypted+compressed form. we need to preserve the original + // RGW_ATTR_COMPRESSION instead of falling back to default compression + // settings auto iter = src_attrs.find(RGW_ATTR_COMPRESSION); - if (iter != src_attrs.end()) { + if (iter != src_attrs.end() && !encrypted) { const bufferlist bl = std::move(iter->second); src_attrs.erase(iter); // don't preserve source compression info -- 2.39.5