From d0e5d3a5c8e176608a9519dc72af51749f9e2b6c Mon Sep 17 00:00:00 2001 From: Marcus Watts Date: Wed, 28 Aug 2024 17:21:13 -0400 Subject: [PATCH] rgw/storage class. Don't inherit storage class for copy object. When an object is copied, it should only be depending on data in the request to determine the storage class, and if it is not specified, it should default to 'STANDARD'. In radosgw, this means that this is another attribute (similar to encryption) that should not be merged from the source object. Fixes: https://tracker.ceph.com/issues/67787 Signed-off-by: Marcus Watts --- src/rgw/rgw_op.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 2a017cad205..413e0eaa6cc 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -6056,6 +6056,7 @@ class RGWCOE_make_filter_pipeline : public rgw::sal::ObjectFilter { std::unique_ptr cb; std::map src_attrs; std::map enc_attrs; + bufferlist requested_sc; bool skip_decrypt; DoutPrefixProvider *dpp; boost::optional decompress; @@ -6224,6 +6225,10 @@ ldpp_dout(dpp, 0) << "TEMP: end_x=" << end_x << " obj_size=" << obj_size << dend // we need it to be just the requested settings clear_encryption_attrs(attrs); merge_attrs(enc_attrs, attrs); // request & bucket encryption defaults + attrs.erase(RGW_ATTR_STORAGE_CLASS); // do not inherit from source + if (requested_sc.length() > 0) { + attrs[RGW_ATTR_STORAGE_CLASS] = std::move(requested_sc); + } attrs.erase(RGW_ATTR_COMPRESSION); // only true source: zone data op_ret = get_encrypt_filter(&encrypt, filter); if (op_ret < 0) { @@ -6257,6 +6262,10 @@ ldpp_dout(dpp, 0) << "TEMP: end_x=" << end_x << " obj_size=" << obj_size << dend void set_src_attrs(std::map &_src) override { src_attrs = filter_encryption_compression_attrs(_src, true); enc_attrs = filter_encryption_compression_attrs(attrs, false); + auto iter = attrs.find(RGW_ATTR_STORAGE_CLASS); + if (iter != attrs.end()) { + requested_sc.append(iter->second); + } }; bool need_copy_data() override { return rgw_need_copy_data( src_attrs, s ); -- 2.39.5