mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-16 17:20:33 +00:00
fix:correctly handle compress object when put object (#1534)
This commit is contained in:
@@ -169,8 +169,9 @@ impl HashReader {
|
|||||||
sha256hex: Option<String>,
|
sha256hex: Option<String>,
|
||||||
diskable_md5: bool,
|
diskable_md5: bool,
|
||||||
) -> std::io::Result<Self> {
|
) -> std::io::Result<Self> {
|
||||||
// Check if it's already a HashReader and update its parameters
|
if size >= 0
|
||||||
if let Some(existing_hash_reader) = inner.as_hash_reader_mut() {
|
&& let Some(existing_hash_reader) = inner.as_hash_reader_mut()
|
||||||
|
{
|
||||||
if existing_hash_reader.bytes_read() > 0 {
|
if existing_hash_reader.bytes_read() > 0 {
|
||||||
return Err(std::io::Error::new(
|
return Err(std::io::Error::new(
|
||||||
std::io::ErrorKind::InvalidData,
|
std::io::ErrorKind::InvalidData,
|
||||||
@@ -212,7 +213,8 @@ impl HashReader {
|
|||||||
let content_sha256 = existing_hash_reader.content_sha256().clone();
|
let content_sha256 = existing_hash_reader.content_sha256().clone();
|
||||||
let content_sha256_hasher = existing_hash_reader.content_sha256().clone().map(|_| Sha256Hasher::new());
|
let content_sha256_hasher = existing_hash_reader.content_sha256().clone().map(|_| Sha256Hasher::new());
|
||||||
let inner = existing_hash_reader.take_inner();
|
let inner = existing_hash_reader.take_inner();
|
||||||
return Ok(Self {
|
|
||||||
|
Ok(Self {
|
||||||
inner,
|
inner,
|
||||||
size,
|
size,
|
||||||
checksum: md5hex.clone(),
|
checksum: md5hex.clone(),
|
||||||
@@ -225,34 +227,36 @@ impl HashReader {
|
|||||||
content_hasher,
|
content_hasher,
|
||||||
checksum_on_finish: false,
|
checksum_on_finish: false,
|
||||||
trailer_s3s: existing_hash_reader.get_trailer().cloned(),
|
trailer_s3s: existing_hash_reader.get_trailer().cloned(),
|
||||||
});
|
})
|
||||||
}
|
} else {
|
||||||
|
if size > 0 {
|
||||||
|
let hr = HardLimitReader::new(inner, size);
|
||||||
|
inner = Box::new(hr);
|
||||||
|
|
||||||
if size > 0 {
|
if !diskable_md5 && !inner.is_hash_reader() {
|
||||||
let hr = HardLimitReader::new(inner, size);
|
let er = EtagReader::new(inner, md5hex.clone());
|
||||||
inner = Box::new(hr);
|
inner = Box::new(er);
|
||||||
if !diskable_md5 && !inner.is_hash_reader() {
|
}
|
||||||
|
} else if !diskable_md5 {
|
||||||
let er = EtagReader::new(inner, md5hex.clone());
|
let er = EtagReader::new(inner, md5hex.clone());
|
||||||
inner = Box::new(er);
|
inner = Box::new(er);
|
||||||
}
|
}
|
||||||
} else if !diskable_md5 {
|
|
||||||
let er = EtagReader::new(inner, md5hex.clone());
|
Ok(Self {
|
||||||
inner = Box::new(er);
|
inner,
|
||||||
|
size,
|
||||||
|
checksum: md5hex,
|
||||||
|
actual_size,
|
||||||
|
diskable_md5,
|
||||||
|
bytes_read: 0,
|
||||||
|
content_hash: None,
|
||||||
|
content_hasher: None,
|
||||||
|
content_sha256: sha256hex.clone(),
|
||||||
|
content_sha256_hasher: sha256hex.map(|_| Sha256Hasher::new()),
|
||||||
|
checksum_on_finish: false,
|
||||||
|
trailer_s3s: None,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
Ok(Self {
|
|
||||||
inner,
|
|
||||||
size,
|
|
||||||
checksum: md5hex,
|
|
||||||
actual_size,
|
|
||||||
diskable_md5,
|
|
||||||
bytes_read: 0,
|
|
||||||
content_hash: None,
|
|
||||||
content_hasher: None,
|
|
||||||
content_sha256: sha256hex.clone(),
|
|
||||||
content_sha256_hasher: sha256hex.clone().map(|_| Sha256Hasher::new()),
|
|
||||||
checksum_on_finish: false,
|
|
||||||
trailer_s3s: None,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn into_inner(self) -> Box<dyn Reader> {
|
pub fn into_inner(self) -> Box<dyn Reader> {
|
||||||
|
|||||||
Reference in New Issue
Block a user