fix(list): skip delete markers in single-object fast path for ListObjects (#5691)

This commit is contained in:
Zhengchao An
2026-08-04 20:49:45 +08:00
committed by GitHub
parent 31959b90db
commit c63dba7d3f
+10 -12
View File
@@ -3716,7 +3716,7 @@ impl ECStore {
} }
// Optimization: use get for single object lookup with exact prefix // Optimization: use get for single object lookup with exact prefix
if !opts.prefix.is_empty() && max_keys == 1 && opts.marker.is_none() { if !opts.prefix.is_empty() && max_keys == 1 && opts.marker.is_none() && !incl_deleted {
match self match self
.get_object_info( .get_object_info(
&opts.bucket, &opts.bucket,
@@ -3728,17 +3728,16 @@ impl ECStore {
) )
.await .await
{ {
Ok(res) => { Ok(res) if !res.delete_marker => {
return Ok(ListObjectsInfo { return Ok(ListObjectsInfo {
objects: vec![res], objects: vec![res],
..Default::default() ..Default::default()
}); });
} }
Err(err) => { Err(err) if is_err_bucket_not_found(&err) => {
if is_err_bucket_not_found(&err) { return Err(err);
return Err(err);
}
} }
_ => {}
}; };
}; };
@@ -5059,7 +5058,7 @@ impl Sets {
// (notably `forward_past`) — see backlog#1047. // (notably `forward_past`) — see backlog#1047.
opts.parse_marker(); opts.parse_marker();
if !opts.prefix.is_empty() && max_keys == 1 && opts.marker.is_none() { if !opts.prefix.is_empty() && max_keys == 1 && opts.marker.is_none() && !incl_deleted {
match self match self
.get_object_info( .get_object_info(
&opts.bucket, &opts.bucket,
@@ -5071,17 +5070,16 @@ impl Sets {
) )
.await .await
{ {
Ok(res) => { Ok(res) if !res.delete_marker => {
return Ok(ListObjectsInfo { return Ok(ListObjectsInfo {
objects: vec![res], objects: vec![res],
..Default::default() ..Default::default()
}); });
} }
Err(err) => { Err(err) if is_err_bucket_not_found(&err) => {
if is_err_bucket_not_found(&err) { return Err(err);
return Err(err);
}
} }
_ => {}
}; };
} }