From b91ff3fd86f52f7148daf7f9acc9864752186ce0 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 --- 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 b09021379d267..8135ae683ff78 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -3402,8 +3402,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