fix: policy StringNotEquals double negation and delete_objects version mapping (#2015)

This commit is contained in:
安正超
2026-03-01 03:13:52 +08:00
committed by GitHub
parent fd1b903531
commit e7466eb1cc
6 changed files with 208 additions and 19 deletions
+9 -12
View File
@@ -2391,8 +2391,8 @@ impl DefaultObjectUsecase {
let mut delete_results = vec![DeleteResult::default(); delete.objects.len()];
let mut object_to_delete = Vec::new();
let mut object_to_delete_index = HashMap::new();
let mut object_sizes = HashMap::new();
let mut object_to_delete_idx = Vec::new();
let mut object_sizes = Vec::new();
for (idx, obj_id) in delete.objects.iter().enumerate() {
let raw_version_id = obj_id.version_id.clone();
let (version_id, version_uuid) = match normalize_delete_objects_version_id(raw_version_id.clone()) {
@@ -2460,7 +2460,7 @@ impl DefaultObjectUsecase {
continue;
}
object_sizes.insert(object.object_name.clone(), goi.size);
object_sizes.push(goi.size);
if is_dir_object(&object.object_name) && object.version_id.is_none() {
object.version_id = Some(Uuid::nil());
@@ -2490,7 +2490,7 @@ impl DefaultObjectUsecase {
}
}
object_to_delete_index.insert(object.object_name.clone(), idx);
object_to_delete_idx.push(idx);
object_to_delete.push(object);
}
@@ -2532,11 +2532,7 @@ impl DefaultObjectUsecase {
}
for (i, err) in errs.iter().enumerate() {
let obj = dobjs[i].clone();
let Some(didx) = object_to_delete_index.get(&obj.object_name) else {
continue;
};
let didx = object_to_delete_idx[i];
if err.is_none()
|| err
@@ -2546,15 +2542,16 @@ impl DefaultObjectUsecase {
if replicate_deletes {
dobjs[i].replication_state = Some(object_to_delete[i].replication_state());
}
delete_results[*didx].delete_object = Some(dobjs[i].clone());
if let Some(&size) = object_sizes.get(&obj.object_name) {
delete_results[didx].delete_object = Some(dobjs[i].clone());
let size = object_sizes[i];
if size > 0 {
rustfs_ecstore::data_usage::decrement_bucket_usage_memory(&bucket, size as u64).await;
}
continue;
}
if let Some(err) = err.clone() {
delete_results[*didx].error = Some(Error {
delete_results[didx].error = Some(Error {
code: Some(err.to_string()),
key: Some(object_to_delete[i].object_name.clone()),
message: Some(err.to_string()),