fix: revert #2351 readers.rs behavioral changes (phase 6) (#2536)

This commit is contained in:
安正超
2026-04-14 22:08:38 +08:00
committed by GitHub
parent 6d476ae9a1
commit db8ef63674
+10 -24
View File
@@ -63,34 +63,31 @@ impl GetObjectReader {
rs = HTTPRangeSpec::from_object_info(oi, part_number);
}
let logical_size = oi.get_actual_size()?;
let encrypted_object = oi.user_defined.contains_key("x-rustfs-encryption-key")
|| oi
.user_defined
.contains_key("x-amz-server-side-encryption-customer-algorithm");
// TODO:Encrypted
let (algo, is_compressed) = oi.is_compressed_ok()?;
// TODO: check TRANSITION
if is_compressed {
let actual_size = oi.get_actual_size()?;
let (off, length, dec_off, dec_length) = if let Some(rs) = rs {
// Support range requests for compressed objects
let (dec_off, dec_length) = rs.get_offset_length(logical_size)?;
let (dec_off, dec_length) = rs.get_offset_length(actual_size)?;
(0, oi.size, dec_off, dec_length)
} else {
(0, oi.size, 0, logical_size)
(0, oi.size, 0, actual_size)
};
let dec_reader = DecompressReader::new(reader, algo);
let actual_size_usize = if logical_size > 0 {
logical_size as usize
let actual_size_usize = if actual_size > 0 {
actual_size as usize
} else {
return Err(Error::other(format!("invalid decompressed size {logical_size}")));
return Err(Error::other(format!("invalid decompressed size {actual_size}")));
};
let final_reader: Box<dyn AsyncRead + Unpin + Send + Sync> = if dec_off > 0 || dec_length != logical_size {
let final_reader: Box<dyn AsyncRead + Unpin + Send + Sync> = if dec_off > 0 || dec_length != actual_size {
// Use RangedDecompressReader for streaming range processing
// The new implementation supports any offset size by streaming and skipping data
match RangedDecompressReader::new(dec_reader, dec_off, dec_length, actual_size_usize) {
@@ -125,19 +122,8 @@ impl GetObjectReader {
));
}
if encrypted_object && rs.is_none() {
return Ok((
GetObjectReader {
stream: reader,
object_info: oi.clone(),
},
0,
oi.size,
));
}
if let Some(rs) = rs {
let (off, length) = rs.get_offset_length(logical_size)?;
let (off, length) = rs.get_offset_length(oi.size)?;
Ok((
GetObjectReader {
@@ -154,7 +140,7 @@ impl GetObjectReader {
object_info: oi.clone(),
},
0,
logical_size,
oi.size,
))
}
}