Skip to content

Commit 8a20dff

Browse files
hualong fenghualongfeng
authored andcommitted
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 <[email protected]>
1 parent 855c5d6 commit 8a20dff

File tree

5 files changed

+36
-13
lines changed

5 files changed

+36
-13
lines changed

src/rgw/driver/daos/rgw_sal_daos.cc

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,11 +1760,14 @@ int DaosMultipartUpload::complete(
17601760
bool part_compressed = (obj_part.cs_info.compression_type != "none");
17611761
if ((handled_parts > 0) &&
17621762
((part_compressed != compressed) ||
1763-
(cs_info.compression_type != obj_part.cs_info.compression_type))) {
1763+
(cs_info.compression_type != obj_part.cs_info.compression_type) ||
1764+
(cs_info.compressor_message.has_value() &&
1765+
(cs_info.compressor_message != obj_part.cs_info.compressor_message)))) {
17641766
ldpp_dout(dpp, 0)
1765-
<< "ERROR: compression type was changed during multipart upload ("
1766-
<< cs_info.compression_type << ">>"
1767-
<< obj_part.cs_info.compression_type << ")" << dendl;
1767+
<< "ERROR: compression type or compressor message was changed during multipart upload ("
1768+
<< cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << "),"
1769+
<< cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ") "
1770+
<< dendl;
17681771
ret = -ERR_INVALID_PART;
17691772
return ret;
17701773
}
@@ -1785,8 +1788,11 @@ int DaosMultipartUpload::complete(
17851788
cs_info.blocks.push_back(cb);
17861789
new_ofs = cb.new_ofs + cb.len;
17871790
}
1788-
if (!compressed)
1791+
if (!compressed) {
17891792
cs_info.compression_type = obj_part.cs_info.compression_type;
1793+
if (obj_part.cs_info.compressor_message.has_value())
1794+
cs_info.compressor_message = obj_part.cs_info.compressor_message;
1795+
}
17901796
cs_info.orig_size += obj_part.cs_info.orig_size;
17911797
compressed = true;
17921798
}

src/rgw/driver/motr/rgw_sal_motr.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2762,9 +2762,13 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp,
27622762
bool part_compressed = (part->cs_info.compression_type != "none");
27632763
if ((handled_parts > 0) &&
27642764
((part_compressed != compressed) ||
2765-
(cs_info.compression_type != part->cs_info.compression_type))) {
2766-
ldpp_dout(dpp, 0) << "ERROR: compression type was changed during multipart upload ("
2767-
<< cs_info.compression_type << ">>" << part->cs_info.compression_type << ")" << dendl;
2765+
(cs_info.compression_type != obj_part.cs_info.compression_type) ||
2766+
(cs_info.compressor_message.has_value() &&
2767+
(cs_info.compressor_message != obj_part.cs_info.compressor_message)))) {
2768+
ldpp_dout(dpp, 0) << "ERROR: compression type or compressor message was changed during multipart upload ("
2769+
<< cs_info.compression_type << ">>" << part->cs_info.compression_type << "),"
2770+
<< cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ")"
2771+
<< dendl;
27682772
rc = -ERR_INVALID_PART;
27692773
return rc;
27702774
}
@@ -2784,8 +2788,11 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp,
27842788
cs_info.blocks.push_back(cb);
27852789
new_ofs = cb.new_ofs + cb.len;
27862790
}
2787-
if (!compressed)
2791+
if (!compressed) {
27882792
cs_info.compression_type = part->cs_info.compression_type;
2793+
if (obj_part.cs_info.compressor_message.has_value())
2794+
cs_info.compressor_message = obj_part.cs_info.compressor_message;
2795+
}
27892796
cs_info.orig_size += part->cs_info.orig_size;
27902797
compressed = true;
27912798
}

src/rgw/driver/rados/rgw_sal_rados.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3319,9 +3319,13 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
33193319
bool part_compressed = (obj_part.cs_info.compression_type != "none");
33203320
if ((handled_parts > 0) &&
33213321
((part_compressed != compressed) ||
3322-
(cs_info.compression_type != obj_part.cs_info.compression_type))) {
3323-
ldpp_dout(dpp, 0) << "ERROR: compression type was changed during multipart upload ("
3324-
<< cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << ")" << dendl;
3322+
(cs_info.compression_type != obj_part.cs_info.compression_type) ||
3323+
(cs_info.compressor_message.has_value() &&
3324+
(cs_info.compressor_message != obj_part.cs_info.compressor_message)))) {
3325+
ldpp_dout(dpp, 0) << "ERROR: compression type or compressor message was changed during multipart upload ("
3326+
<< cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << "), "
3327+
<< cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ") "
3328+
<< dendl;
33253329
ret = -ERR_INVALID_PART;
33263330
return ret;
33273331
}
@@ -3340,8 +3344,11 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
33403344
cs_info.blocks.push_back(cb);
33413345
new_ofs = cb.new_ofs + cb.len;
33423346
}
3343-
if (!compressed)
3347+
if (!compressed) {
33443348
cs_info.compression_type = obj_part.cs_info.compression_type;
3349+
if (obj_part.cs_info.compressor_message.has_value())
3350+
cs_info.compressor_message = obj_part.cs_info.compressor_message;
3351+
}
33453352
cs_info.orig_size += obj_part.cs_info.orig_size;
33463353
compressed = true;
33473354
}

src/rgw/rgw_file.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1967,12 +1967,14 @@ namespace rgw {
19671967
RGWCompressionInfo cs_info;
19681968
cs_info.compression_type = plugin->get_type_name();
19691969
cs_info.orig_size = state->obj_size;
1970+
cs_info.compressor_message = compressor->get_compressor_message();
19701971
cs_info.blocks = std::move(compressor->get_compression_blocks());
19711972
encode(cs_info, tmp);
19721973
attrs[RGW_ATTR_COMPRESSION] = tmp;
19731974
ldpp_dout(this, 20) << "storing " << RGW_ATTR_COMPRESSION
19741975
<< " with type=" << cs_info.compression_type
19751976
<< ", orig_size=" << cs_info.orig_size
1977+
<< ", compressor_message=" << cs_info.compressor_message
19761978
<< ", blocks=" << cs_info.blocks.size() << dendl;
19771979
}
19781980

src/rgw/rgw_op.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4420,6 +4420,7 @@ void RGWPutObj::execute(optional_yield y)
44204420
ldpp_dout(this, 20) << "storing " << RGW_ATTR_COMPRESSION
44214421
<< " with type=" << cs_info.compression_type
44224422
<< ", orig_size=" << cs_info.orig_size
4423+
<< ", compressor_message=" << cs_info.compressor_message
44234424
<< ", blocks=" << cs_info.blocks.size() << dendl;
44244425
}
44254426
if (torrent) {

0 commit comments

Comments
 (0)