mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-30 16:59:52 +00:00
fix(list): skip delete markers in single-object fast path for ListObjects (#5691)
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user