mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 16:28:15 +00:00
feat(get): SF04 - remove unnecessary tokio::spawn in metadata fanout
Replace tokio::spawn with direct async future in read_all_fileinfo_full_wait. join_all already provides concurrency, so tokio::spawn adds unnecessary task creation and scheduling overhead. Changes: - Remove tokio::spawn from metadata fanout futures - Update result handling for direct future results Expected impact: 16-32us reduction per GET request. Closes rustfs/backlog#769 Co-Authored-By: heihutu <heihutu@gmail.com>
This commit is contained in:
@@ -1228,7 +1228,7 @@ impl SetDisks {
|
|||||||
let bucket = bucket.clone();
|
let bucket = bucket.clone();
|
||||||
let object = object.clone();
|
let object = object.clone();
|
||||||
let version_id = version_id.clone();
|
let version_id = version_id.clone();
|
||||||
tokio::spawn(async move {
|
async move {
|
||||||
let response_start = observe.then(Instant::now);
|
let response_start = observe.then(Instant::now);
|
||||||
let result = if let Some(disk) = disk {
|
let result = if let Some(disk) = disk {
|
||||||
disk.read_version(&org_bucket, &bucket, &object, &version_id, &opts).await
|
disk.read_version(&org_bucket, &bucket, &object, &version_id, &opts).await
|
||||||
@@ -1237,37 +1237,27 @@ impl SetDisks {
|
|||||||
};
|
};
|
||||||
let elapsed = response_start.map(|start| start.elapsed());
|
let elapsed = response_start.map(|start| start.elapsed());
|
||||||
(result, elapsed)
|
(result, elapsed)
|
||||||
})
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Wait for all tasks to complete
|
// Wait for all futures to complete
|
||||||
let results = join_all(futures).await;
|
let results = join_all(futures).await;
|
||||||
|
|
||||||
for result in results {
|
for (res, elapsed) in results {
|
||||||
match result {
|
match res {
|
||||||
Ok((res, elapsed)) => match res {
|
Ok(file_info) => {
|
||||||
Ok(file_info) => {
|
if let (Some(observations), Some(elapsed)) = (&mut observations, elapsed) {
|
||||||
if let (Some(observations), Some(elapsed)) = (&mut observations, elapsed) {
|
observations.push(MetadataFanoutObservation::from_file_info(&file_info, elapsed));
|
||||||
observations.push(MetadataFanoutObservation::from_file_info(&file_info, elapsed));
|
|
||||||
}
|
|
||||||
ress.push(file_info);
|
|
||||||
errors.push(None);
|
|
||||||
}
|
}
|
||||||
Err(e) => {
|
ress.push(file_info);
|
||||||
if let (Some(observations), Some(elapsed)) = (&mut observations, elapsed) {
|
errors.push(None);
|
||||||
observations.push(MetadataFanoutObservation::from_error(&e, elapsed));
|
}
|
||||||
}
|
Err(e) => {
|
||||||
ress.push(FileInfo::default());
|
if let (Some(observations), Some(elapsed)) = (&mut observations, elapsed) {
|
||||||
errors.push(Some(e));
|
observations.push(MetadataFanoutObservation::from_error(&e, elapsed));
|
||||||
}
|
|
||||||
},
|
|
||||||
Err(_) => {
|
|
||||||
let err = DiskError::Unexpected;
|
|
||||||
if let (Some(observations), Some(fanout_start)) = (&mut observations, fanout_start) {
|
|
||||||
observations.push(MetadataFanoutObservation::from_error(&err, fanout_start.elapsed()));
|
|
||||||
}
|
}
|
||||||
ress.push(FileInfo::default());
|
ress.push(FileInfo::default());
|
||||||
errors.push(Some(err));
|
errors.push(Some(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user