fix(ecstore): bound copy-source shard read-ahead (#6663)

This commit is contained in:
cxymds
2026-08-26 21:24:37 +08:00
committed by GitHub
parent a96dd7d289
commit 7c2361757e
13 changed files with 2262 additions and 145 deletions
+5 -3
View File
@@ -33,7 +33,9 @@ use super::storage_api::multipart_usecase::contract::http::HTTPPreconditions;
use super::storage_api::multipart_usecase::contract::multipart::{
CompletePart, MAX_MULTIPART_PART_NUMBER, MultipartOperations as _, MultipartUploadResult,
};
use super::storage_api::multipart_usecase::contract::object::{ObjectIO as _, ObjectOperations as _};
#[cfg(test)]
use super::storage_api::multipart_usecase::contract::object::ObjectIO as _;
use super::storage_api::multipart_usecase::contract::object::ObjectOperations as _;
use super::storage_api::multipart_usecase::contract::range::HTTPRangeSpec;
use super::storage_api::multipart_usecase::data_usage::{
quota_object_size, record_bucket_object_version_write_memory, record_bucket_object_write_memory,
@@ -1443,8 +1445,8 @@ impl DefaultMultipartUsecase {
.into());
}
let src_reader = store
.get_object_reader(&src_bucket, &src_key, rs.clone(), h, &get_opts)
let (src_reader, _source_cancellation) = store
.get_object_reader_for_copy(&src_bucket, &src_key, rs.clone(), h, &get_opts)
.await
.map_err(map_get_object_reader_error)?;
+9 -2
View File
@@ -7948,11 +7948,18 @@ impl DefaultObjectUsecase {
.into());
}
let gr = store
.get_object_reader(&src_bucket, &src_key, None, h, &src_get_opts)
let (gr, source_cancellation) = store
.get_object_reader_for_copy(&src_bucket, &src_key, None, h, &src_get_opts)
.await
.map_err(map_get_object_reader_error)?;
// The commit owner is intentionally detached so SetDisk can finish
// its rename/cleanup and post-commit publication if the HTTP caller
// goes away. Keep a request-owned guard for the source producer:
// cancellation drops the source read promptly, while the detached
// commit task retains the guards it needs to complete safely.
let _source_cancellation_guard = source_cancellation.clone().drop_guard();
let mut src_info = gr.object_info.clone();
// A copy reads the source plaintext, so it needs the source key's decrypt permission
+3 -1
View File
@@ -1185,7 +1185,9 @@ pub(crate) mod multipart_usecase {
}
pub(crate) mod object {
pub(crate) use super::super::super::storage_contracts::{ObjectIO, ObjectOperations};
#[cfg(test)]
pub(crate) use super::super::super::storage_contracts::ObjectIO;
pub(crate) use super::super::super::storage_contracts::ObjectOperations;
}
pub(crate) mod range {