mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-09-03 02:38:14 +00:00
fix(s3): treat NoSuchKey as success in bulk DeleteObjects
This commit is contained in:
+15
-2
@@ -83,8 +83,21 @@ pub async fn handle_delete_objects(
|
|||||||
}
|
}
|
||||||
ret_deleted.push(s3_xml::Deleted {
|
ret_deleted.push(s3_xml::Deleted {
|
||||||
key: s3_xml::Value(obj.key.clone()),
|
key: s3_xml::Value(obj.key.clone()),
|
||||||
version_id: s3_xml::Value(hex::encode(deleted_version)),
|
version_id: Some(s3_xml::Value(hex::encode(deleted_version))),
|
||||||
delete_marker_version_id: s3_xml::Value(hex::encode(delete_marker_version)),
|
delete_marker_version_id: Some(s3_xml::Value(hex::encode(
|
||||||
|
delete_marker_version,
|
||||||
|
))),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Err(Error::NoSuchKey) => {
|
||||||
|
if cmd.quiet {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Deleting a non-existent key is a success in S3
|
||||||
|
ret_deleted.push(s3_xml::Deleted {
|
||||||
|
key: s3_xml::Value(obj.key.clone()),
|
||||||
|
version_id: None,
|
||||||
|
delete_marker_version_id: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|||||||
+11
-8
@@ -44,10 +44,13 @@ pub struct LocationConstraint {
|
|||||||
pub struct Deleted {
|
pub struct Deleted {
|
||||||
#[serde(rename = "Key")]
|
#[serde(rename = "Key")]
|
||||||
pub key: Value,
|
pub key: Value,
|
||||||
#[serde(rename = "VersionId")]
|
#[serde(rename = "VersionId", skip_serializing_if = "Option::is_none")]
|
||||||
pub version_id: Value,
|
pub version_id: Option<Value>,
|
||||||
#[serde(rename = "DeleteMarkerVersionId")]
|
#[serde(
|
||||||
pub delete_marker_version_id: Value,
|
rename = "DeleteMarkerVersionId",
|
||||||
|
skip_serializing_if = "Option::is_none"
|
||||||
|
)]
|
||||||
|
pub delete_marker_version_id: Option<Value>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, PartialEq, Eq)]
|
#[derive(Debug, Serialize, PartialEq, Eq)]
|
||||||
@@ -497,13 +500,13 @@ mod tests {
|
|||||||
deleted: vec![
|
deleted: vec![
|
||||||
Deleted {
|
Deleted {
|
||||||
key: Value("a/plop".to_string()),
|
key: Value("a/plop".to_string()),
|
||||||
version_id: Value("qsdfjklm".to_string()),
|
version_id: Some(Value("qsdfjklm".to_string())),
|
||||||
delete_marker_version_id: Value("wxcvbn".to_string()),
|
delete_marker_version_id: Some(Value("wxcvbn".to_string())),
|
||||||
},
|
},
|
||||||
Deleted {
|
Deleted {
|
||||||
key: Value("b/plip".to_string()),
|
key: Value("b/plip".to_string()),
|
||||||
version_id: Value("1234".to_string()),
|
version_id: Some(Value("1234".to_string())),
|
||||||
delete_marker_version_id: Value("4321".to_string()),
|
delete_marker_version_id: Some(Value("4321".to_string())),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
errors: vec![
|
errors: vec![
|
||||||
|
|||||||
Reference in New Issue
Block a user