Skip to content

Commit 53098ba

Browse files
committed
rgw/cksum: GetObject omits checksum headers for Range requests
if we send response headers containing full-object checksums, clients will compare them with the returned data and fail with: > botocore.exceptions.FlexibleChecksumError: Expected checksum 4AAr8A== did not match calculated checksum: WbxXZw== the only thing aws docs[1] say about Range requests refers to multipart uploads: > For completed uploads, you can get an individual part's checksum by using the GetObject or HeadObject operations and specifying a part number or byte range that aligns with a single part. Fixes: https://tracker.ceph.com/issues/69936 [1] https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#Part-level-checksums Signed-off-by: Casey Bodley <[email protected]>
1 parent 89f21db commit 53098ba

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

src/rgw/rgw_rest_s3.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,10 @@ int RGWGetObj_ObjStore_S3::send_response_data(bufferlist& bl, off_t bl_ofs,
501501
}
502502
}
503503

504-
if (checksum_mode) {
504+
// omit the stored full-object checksum headers if a Range is requested
505+
// TODO: detect when a Range coincides with a single part of a multipart
506+
// upload, and return its part checksum?
507+
if (checksum_mode && !range_str) {
505508
if (auto i = attrs.find(RGW_ATTR_CKSUM); i != attrs.end()) {
506509
try {
507510
rgw::cksum::Cksum cksum;

0 commit comments

Comments
 (0)