mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-30 08:49:26 +00:00
fix(ecstore): bound copy-source shard read-ahead (#6663)
This commit is contained in:
@@ -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)?;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user