mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-19 11:06:17 +00:00
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:
@@ -829,6 +829,7 @@ impl ECStore {
|
|||||||
let (merge_tx, mut merge_rx) = mpsc::channel::<MetaCacheEntry>(100);
|
let (merge_tx, mut merge_rx) = mpsc::channel::<MetaCacheEntry>(100);
|
||||||
|
|
||||||
let bucket = bucket.to_owned();
|
let bucket = bucket.to_owned();
|
||||||
|
let bucket_clone = bucket.clone();
|
||||||
|
|
||||||
let vcf = match get_versioning_config(&bucket).await {
|
let vcf = match get_versioning_config(&bucket).await {
|
||||||
Ok((res, _)) => Some(res),
|
Ok((res, _)) => Some(res),
|
||||||
@@ -839,7 +840,7 @@ impl ECStore {
|
|||||||
let mut sent_err = false;
|
let mut sent_err = false;
|
||||||
while let Some(entry) = merge_rx.recv().await {
|
while let Some(entry) = merge_rx.recv().await {
|
||||||
if opts.latest_only {
|
if opts.latest_only {
|
||||||
let fi = match entry.to_fileinfo(&bucket) {
|
let fi = match entry.to_fileinfo(&bucket_clone) {
|
||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if !sent_err {
|
if !sent_err {
|
||||||
@@ -864,7 +865,7 @@ impl ECStore {
|
|||||||
if let Some(filter) = opts.filter {
|
if let Some(filter) = opts.filter {
|
||||||
if filter(&fi) {
|
if filter(&fi) {
|
||||||
let item = ObjectInfoOrErr {
|
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 }
|
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
|
||||||
})),
|
})),
|
||||||
err: None,
|
err: None,
|
||||||
@@ -876,7 +877,7 @@ impl ECStore {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let item = ObjectInfoOrErr {
|
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 }
|
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
|
||||||
})),
|
})),
|
||||||
err: None,
|
err: None,
|
||||||
@@ -889,7 +890,7 @@ impl ECStore {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let fvs = match entry.file_info_versions(&bucket) {
|
let fvs = match entry.file_info_versions(&bucket_clone) {
|
||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
let item = ObjectInfoOrErr {
|
let item = ObjectInfoOrErr {
|
||||||
@@ -912,7 +913,7 @@ impl ECStore {
|
|||||||
if let Some(filter) = opts.filter {
|
if let Some(filter) = opts.filter {
|
||||||
if filter(fi) {
|
if filter(fi) {
|
||||||
let item = ObjectInfoOrErr {
|
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 }
|
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
|
||||||
})),
|
})),
|
||||||
err: None,
|
err: None,
|
||||||
@@ -924,7 +925,7 @@ impl ECStore {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let item = ObjectInfoOrErr {
|
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 }
|
if let Some(v) = &vcf { v.versioned(&fi.name) } else { false }
|
||||||
})),
|
})),
|
||||||
err: None,
|
err: None,
|
||||||
@@ -940,7 +941,18 @@ impl ECStore {
|
|||||||
|
|
||||||
tokio::spawn(async move { merge_entry_channels(rx, inputs, merge_tx, 1).await });
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -369,9 +369,17 @@ impl ObjectStore {
|
|||||||
|
|
||||||
let path = prefix.to_owned();
|
let path = prefix.to_owned();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
store
|
if let Err(err) = store
|
||||||
.walk(ctx.clone(), Self::BUCKET_NAME, &path, tx, WalkOptions::default())
|
.walk(ctx.clone(), Self::BUCKET_NAME, &path, tx, WalkOptions::default())
|
||||||
.await
|
.await
|
||||||
|
{
|
||||||
|
error!(
|
||||||
|
bucket = Self::BUCKET_NAME,
|
||||||
|
prefix = %path,
|
||||||
|
error = ?err,
|
||||||
|
"list_iam_config_items walk task failed"
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let prefix = prefix.to_owned();
|
let prefix = prefix.to_owned();
|
||||||
|
|||||||
Reference in New Issue
Block a user