don't panic on missing checksum (fix #1387) (#1389)

fix https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/1387

Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/1389
Reviewed-by: Alex <lx@deuxfleurs.fr>
Co-authored-by: trinity-1686a <trinity-1686a@noreply.localhost>
Co-committed-by: trinity-1686a <trinity-1686a@noreply.localhost>
This commit is contained in:
trinity-1686a
2026-03-17 18:16:37 +00:00
committed by Alex
parent 9848ec7f4e
commit 60244b60dd
4 changed files with 45 additions and 16 deletions
+1 -1
View File
@@ -706,7 +706,7 @@ pub async fn handle_upload_part_copy(
let checksums = checksummer.finalize();
let etag = dest_encryption.etag_from_md5(&checksums.md5);
let checksum = checksums.extract(dest_object_checksum_algorithm.map(|(algo, _)| algo));
let checksum = checksums.extract(dest_object_checksum_algorithm.map(|(algo, _)| algo))?;
// Put the part's ETag in the Versiontable
dest_mpu.parts.put(
+1 -1
View File
@@ -225,7 +225,7 @@ pub async fn handle_put_part(
MpuPart {
version: version_uuid,
etag: Some(etag.clone()),
checksum: checksums.extract(checksum_algorithm.map(|(algo, _)| algo)),
checksum: checksums.extract(checksum_algorithm.map(|(algo, _)| algo))?,
size: Some(total_size),
},
);
+4 -4
View File
@@ -178,7 +178,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
checksums.verify(&expected)?;
}
ChecksumMode::Calculate(algo) => {
meta.checksum = checksums.extract(algo);
meta.checksum = checksums.extract(algo)?;
}
ChecksumMode::VerifyFrom {
checksummer,
@@ -189,7 +189,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
.await
.ok_or_internal_error("checksum calculation")??;
if let Some(algo) = trailer_algo {
meta.checksum = checksums.extract(Some(algo));
meta.checksum = checksums.extract(Some(algo))?;
}
}
}
@@ -280,7 +280,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
checksums.verify(&expected)?;
}
ChecksumMode::Calculate(algo) => {
meta.checksum = checksums.extract(algo);
meta.checksum = checksums.extract(algo)?;
}
ChecksumMode::VerifyFrom {
checksummer,
@@ -290,7 +290,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
.await
.ok_or_internal_error("checksum calculation")??;
if let Some(algo) = trailer_algo {
meta.checksum = checksums.extract(Some(algo));
meta.checksum = checksums.extract(Some(algo))?;
}
}
}