]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: fix checksum for get part request
authorsungjoon_koh <sungjoon_koh@linecorp.com>
Mon, 13 Oct 2025 15:20:20 +0000 (00:20 +0900)
committerCasey Bodley <cbodley@redhat.com>
Tue, 2 Dec 2025 15:14:53 +0000 (10:14 -0500)
Signed-off-by: sungjoon_koh <sungjoon_koh@linecorp.com>
src/rgw/rgw_cksum.h
src/rgw/rgw_rest_s3.cc

index bb2bc062f67abd579449cdc33f88e19a3a6fb62d..7d53491ba33b280be164e77bcfc31432c036184e 100644 (file)
@@ -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 */
index 0d6832ba2cfbb707f160ec86c38ccff2d14e3728..7aef4284ce9cae937b1f1882c90ca7f7bf88f2c4 100644 (file)
@@ -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();