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 <cbodley@redhat.com>
}
}
- if (checksum_mode) {
+ // omit the stored full-object checksum headers if a Range is requested
+ // TODO: detect when a Range coincides with a single part of a multipart
+ // upload, and return its part checksum?
+ if (checksum_mode && !range_str) {
if (auto i = attrs.find(RGW_ATTR_CKSUM); i != attrs.end()) {
try {
rgw::cksum::Cksum cksum;