fix(ecstore): log walk failures in IAM listing path (#2705)

Co-authored-by: GatewayJ <8352692332qq.com>
Co-authored-by: loverustfs <hello@rustfs.com>
Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
GatewayJ
2026-04-27 22:13:40 +08:00
committed by GitHub
parent 159ddd5bac
commit 09be06a4d2
2 changed files with 28 additions and 8 deletions

View File

@@ -829,6 +829,7 @@ impl ECStore {
let (merge_tx, mut merge_rx) = mpsc::channel::<MetaCacheEntry>(100);
let bucket = bucket.to_owned();
let bucket_clone = bucket.clone();
let vcf = match get_versioning_config(&bucket).await {
Ok((res, _)) => Some(res),
@@ -839,7 +840,7 @@ impl ECStore {
let mut sent_err = false;
while let Some(entry) = merge_rx.recv().await {
if opts.latest_only {
let fi = match entry.to_fileinfo(&bucket) {
let fi = match entry.to_fileinfo(&bucket_clone) {
Ok(res) => res,
Err(err) => {
if !sent_err {
@@ -864,7 +865,7 @@ impl ECStore {
if let Some(filter) = opts.filter {
if filter(&fi) {
let item = ObjectInfoOrErr {
item: Some(ObjectInfo::from_file_info(&fi, &bucket, &fi.name, {
item: Some(ObjectInfo::from_file_info(&fi, &bucket_clone, &fi.name, {
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
})),
err: None,
@@ -876,7 +877,7 @@ impl ECStore {
}
} else {
let item = ObjectInfoOrErr {
item: Some(ObjectInfo::from_file_info(&fi, &bucket, &fi.name, {
item: Some(ObjectInfo::from_file_info(&fi, &bucket_clone, &fi.name, {
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
})),
err: None,
@@ -889,7 +890,7 @@ impl ECStore {
continue;
}
let fvs = match entry.file_info_versions(&bucket) {
let fvs = match entry.file_info_versions(&bucket_clone) {
Ok(res) => res,
Err(err) => {
let item = ObjectInfoOrErr {
@@ -912,7 +913,7 @@ impl ECStore {
if let Some(filter) = opts.filter {
if filter(fi) {
let item = ObjectInfoOrErr {
item: Some(ObjectInfo::from_file_info(fi, &bucket, &fi.name, {
item: Some(ObjectInfo::from_file_info(fi, &bucket_clone, &fi.name, {
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
})),
err: None,
@@ -924,7 +925,7 @@ impl ECStore {
}
} else {
let item = ObjectInfoOrErr {
item: Some(ObjectInfo::from_file_info(fi, &bucket, &fi.name, {
item: Some(ObjectInfo::from_file_info(fi, &bucket_clone, &fi.name, {
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
})),
err: None,
@@ -940,7 +941,18 @@ impl ECStore {
tokio::spawn(async move { merge_entry_channels(rx, inputs, merge_tx, 1).await });
join_all(futures).await;
let walk_results = join_all(futures).await;
for (idx, walk_result) in walk_results.into_iter().enumerate() {
if let Err(err) = walk_result {
error!(
bucket = %bucket,
prefix = %prefix,
set_task_index = idx,
error = ?err,
"walk_internal list_path_raw task failed"
);
}
}
Ok(())
}

View File

@@ -369,9 +369,17 @@ impl ObjectStore {
let path = prefix.to_owned();
tokio::spawn(async move {
store
if let Err(err) = store
.walk(ctx.clone(), Self::BUCKET_NAME, &path, tx, WalkOptions::default())
.await
{
error!(
bucket = Self::BUCKET_NAME,
prefix = %path,
error = ?err,
"list_iam_config_items walk task failed"
);
}
});
let prefix = prefix.to_owned();