Fix DELETE cleanup cost with single-syscall rmdir walk, tighten FS segment validation, stream CopyObject

This commit is contained in:
2026-04-24 15:04:16 +08:00
parent 1ea6dfae07
commit 4f05192548
3 changed files with 65 additions and 49 deletions

View File

@@ -2395,7 +2395,7 @@ async fn copy_object_handler(
source_metadata_existing.clone()
};
let (_meta, mut reader) = match src_version_id.as_deref() {
let (_meta, reader) = match src_version_id.as_deref() {
Some(version_id) if version_id != "null" => {
match state
.storage
@@ -2411,19 +2411,10 @@ async fn copy_object_handler(
Err(e) => return storage_err_response(e),
},
};
let mut data = Vec::new();
if let Err(e) = reader.read_to_end(&mut data).await {
return storage_err_response(myfsio_storage::error::StorageError::Io(e));
}
let copy_result = state
.storage
.put_object(
dst_bucket,
dst_key,
Box::pin(std::io::Cursor::new(data)),
Some(dst_metadata),
)
.put_object(dst_bucket, dst_key, reader, Some(dst_metadata))
.await;
match copy_result {