From: hualong feng Date: Fri, 14 Jun 2024 07:50:53 +0000 (+0800) Subject: rgw: fixup compressor_message didn't store in some cases X-Git-Tag: v20.0.0~1414^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8a20dff09f9bba26ecbc7ae5d76a2f720d0746f2;p=ceph.git rgw: fixup compressor_message didn't store in some cases When I upload a object to RGW by multipart, the head object xattr(user.rgw.compression) don't have compressor_message when the value should be valid and part object xattr have the value. Signed-off-by: Feng,Hualong --- diff --git a/src/rgw/driver/daos/rgw_sal_daos.cc b/src/rgw/driver/daos/rgw_sal_daos.cc index b105d9684b72..8b4d8e6e4174 100644 --- a/src/rgw/driver/daos/rgw_sal_daos.cc +++ b/src/rgw/driver/daos/rgw_sal_daos.cc @@ -1760,11 +1760,14 @@ int DaosMultipartUpload::complete( bool part_compressed = (obj_part.cs_info.compression_type != "none"); if ((handled_parts > 0) && ((part_compressed != compressed) || - (cs_info.compression_type != obj_part.cs_info.compression_type))) { + (cs_info.compression_type != obj_part.cs_info.compression_type) || + (cs_info.compressor_message.has_value() && + (cs_info.compressor_message != obj_part.cs_info.compressor_message)))) { ldpp_dout(dpp, 0) - << "ERROR: compression type was changed during multipart upload (" - << cs_info.compression_type << ">>" - << obj_part.cs_info.compression_type << ")" << dendl; + << "ERROR: compression type or compressor message was changed during multipart upload (" + << cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << ")," + << cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ") " + << dendl; ret = -ERR_INVALID_PART; return ret; } @@ -1785,8 +1788,11 @@ int DaosMultipartUpload::complete( cs_info.blocks.push_back(cb); new_ofs = cb.new_ofs + cb.len; } - if (!compressed) + if (!compressed) { cs_info.compression_type = obj_part.cs_info.compression_type; + if (obj_part.cs_info.compressor_message.has_value()) + cs_info.compressor_message = obj_part.cs_info.compressor_message; + } cs_info.orig_size += obj_part.cs_info.orig_size; compressed = true; } diff --git a/src/rgw/driver/motr/rgw_sal_motr.cc b/src/rgw/driver/motr/rgw_sal_motr.cc index 740d82a330cc..851e9109c0d7 100644 --- a/src/rgw/driver/motr/rgw_sal_motr.cc +++ b/src/rgw/driver/motr/rgw_sal_motr.cc @@ -2762,9 +2762,13 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp, bool part_compressed = (part->cs_info.compression_type != "none"); if ((handled_parts > 0) && ((part_compressed != compressed) || - (cs_info.compression_type != part->cs_info.compression_type))) { - ldpp_dout(dpp, 0) << "ERROR: compression type was changed during multipart upload (" - << cs_info.compression_type << ">>" << part->cs_info.compression_type << ")" << dendl; + (cs_info.compression_type != obj_part.cs_info.compression_type) || + (cs_info.compressor_message.has_value() && + (cs_info.compressor_message != obj_part.cs_info.compressor_message)))) { + ldpp_dout(dpp, 0) << "ERROR: compression type or compressor message was changed during multipart upload (" + << cs_info.compression_type << ">>" << part->cs_info.compression_type << ")," + << cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ")" + << dendl; rc = -ERR_INVALID_PART; return rc; } @@ -2784,8 +2788,11 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp, cs_info.blocks.push_back(cb); new_ofs = cb.new_ofs + cb.len; } - if (!compressed) + if (!compressed) { cs_info.compression_type = part->cs_info.compression_type; + if (obj_part.cs_info.compressor_message.has_value()) + cs_info.compressor_message = obj_part.cs_info.compressor_message; + } cs_info.orig_size += part->cs_info.orig_size; compressed = true; } diff --git a/src/rgw/driver/rados/rgw_sal_rados.cc b/src/rgw/driver/rados/rgw_sal_rados.cc index b478d4bde7a3..56b8b22f0d8d 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.cc +++ b/src/rgw/driver/rados/rgw_sal_rados.cc @@ -3319,9 +3319,13 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp, bool part_compressed = (obj_part.cs_info.compression_type != "none"); if ((handled_parts > 0) && ((part_compressed != compressed) || - (cs_info.compression_type != obj_part.cs_info.compression_type))) { - ldpp_dout(dpp, 0) << "ERROR: compression type was changed during multipart upload (" - << cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << ")" << dendl; + (cs_info.compression_type != obj_part.cs_info.compression_type) || + (cs_info.compressor_message.has_value() && + (cs_info.compressor_message != obj_part.cs_info.compressor_message)))) { + ldpp_dout(dpp, 0) << "ERROR: compression type or compressor message was changed during multipart upload (" + << cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << "), " + << cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ") " + << dendl; ret = -ERR_INVALID_PART; return ret; } @@ -3340,8 +3344,11 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp, cs_info.blocks.push_back(cb); new_ofs = cb.new_ofs + cb.len; } - if (!compressed) + if (!compressed) { cs_info.compression_type = obj_part.cs_info.compression_type; + if (obj_part.cs_info.compressor_message.has_value()) + cs_info.compressor_message = obj_part.cs_info.compressor_message; + } cs_info.orig_size += obj_part.cs_info.orig_size; compressed = true; } diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 66e883e7257a..a2d9f5e78362 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -1967,12 +1967,14 @@ namespace rgw { RGWCompressionInfo cs_info; cs_info.compression_type = plugin->get_type_name(); cs_info.orig_size = state->obj_size; + cs_info.compressor_message = compressor->get_compressor_message(); cs_info.blocks = std::move(compressor->get_compression_blocks()); encode(cs_info, tmp); attrs[RGW_ATTR_COMPRESSION] = tmp; ldpp_dout(this, 20) << "storing " << RGW_ATTR_COMPRESSION << " with type=" << cs_info.compression_type << ", orig_size=" << cs_info.orig_size + << ", compressor_message=" << cs_info.compressor_message << ", blocks=" << cs_info.blocks.size() << dendl; } diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index e92478477058..6b93a49e6cb1 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -4420,6 +4420,7 @@ void RGWPutObj::execute(optional_yield y) ldpp_dout(this, 20) << "storing " << RGW_ATTR_COMPRESSION << " with type=" << cs_info.compression_type << ", orig_size=" << cs_info.orig_size + << ", compressor_message=" << cs_info.compressor_message << ", blocks=" << cs_info.blocks.size() << dendl; } if (torrent) {