From: sungjoon_koh Date: Mon, 13 Oct 2025 15:20:20 +0000 (+0900) Subject: rgw: fix checksum for get part request X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f75d666ddb9d3895ceca8a6856b0eebcd1b19a06;p=ceph-ci.git rgw: fix checksum for get part request Signed-off-by: sungjoon_koh --- diff --git a/src/rgw/rgw_cksum.h b/src/rgw/rgw_cksum.h index bb2bc062f67..7d53491ba33 100644 --- a/src/rgw/rgw_cksum.h +++ b/src/rgw/rgw_cksum.h @@ -407,4 +407,13 @@ namespace rgw { namespace cksum { return ChecksumTypeResult(Cksum::FLAG_COMPOSITE, "COMPOSITE"); } /* get_checksum_type */ + static inline ChecksumTypeResult + get_part_checksum_type(const Cksum& cksum) { + if (cksum.flags & Cksum::FLAG_COMPOSITE) { + return ChecksumTypeResult(Cksum::FLAG_COMPOSITE, "COMPOSITE"); + } else { + return ChecksumTypeResult(Cksum::FLAG_CKSUM_NONE, "FULL_OBJECT"); + } + } /* get_part_checksum_type */ + }} /* namespace */ diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 0d6832ba2cf..7aef4284ce9 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -555,18 +555,29 @@ int RGWGetObj_ObjStore_S3::send_response_data(bufferlist& bl, off_t bl_ofs, try { rgw::cksum::Cksum cksum; decode(cksum, i->second); - auto cksum_type = - rgw::cksum::get_checksum_type(cksum, - (multipart_parts_count && multipart_parts_count > 0) /* is_multipart */); + rgw::cksum::ChecksumTypeResult cksum_type; + if (multipart_part_num) { + cksum_type = rgw::cksum::get_part_checksum_type(cksum); + } else { + cksum_type = rgw::cksum::get_checksum_type(cksum, + (multipart_parts_count && multipart_parts_count > 0) /* is_multipart */); + } if (std::get<0>(cksum_type) == rgw::cksum::Cksum::FLAG_COMPOSITE) { /* cksum was computed with a digest algorithm, or predates the 2025 update that introduced CRC combining */ - ldpp_dout_fmt(this, 16, - "INFO: {} ChecksumMode==ENABLED element-name {} value {}-{}", - __func__, cksum.element_name(), cksum.to_armor(), - *multipart_parts_count); - dump_header(s, cksum.header_name(), - fmt::format("{}-{}", cksum.to_armor(), *multipart_parts_count)); + if (multipart_part_num) { + ldpp_dout_fmt(this, 16, + "INFO: {} ChecksumMode==ENABLED element-name {} value {}", + __func__, cksum.element_name(), cksum.to_armor()); + dump_header(s, cksum.header_name(), cksum.to_armor()); + } else { + ldpp_dout_fmt(this, 16, + "INFO: {} ChecksumMode==ENABLED element-name {} value {}-{}", + __func__, cksum.element_name(), cksum.to_armor(), + *multipart_parts_count); + dump_header(s, cksum.header_name(), + fmt::format("{}-{}", cksum.to_armor(), *multipart_parts_count)); + } } else { /* a full object checksum, if multipart, because the checksum is CRC family */ auto elt_name = cksum.element_name();