Skip to content

Commit 06dfd05

Browse files
sypharjyn514
authored andcommitted
fix delete_prefix for S3 storage when there are no matching objects
1 parent cbd9081 commit 06dfd05

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

src/storage/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,10 @@ mod backend_tests {
878878
Ok(())
879879
}
880880

881+
fn test_delete_prefix_without_matches(storage: &Storage) -> Result<()> {
882+
storage.delete_prefix("prefix_without_objects")
883+
}
884+
881885
fn test_delete_prefix(storage: &Storage) -> Result<()> {
882886
test_deletion(
883887
storage,
@@ -1003,6 +1007,7 @@ mod backend_tests {
10031007
test_get_range,
10041008
test_get_too_big,
10051009
test_delete_prefix,
1010+
test_delete_prefix_without_matches,
10061011
test_delete_percent,
10071012
test_exists_without_remote_archive,
10081013
}

src/storage/s3.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -250,25 +250,27 @@ impl<'a> StorageTransaction for S3StorageTransaction<'a> {
250250
})
251251
.collect::<Vec<_>>();
252252

253-
let resp = self
254-
.s3
255-
.client
256-
.delete_objects(DeleteObjectsRequest {
257-
bucket: self.s3.bucket.clone(),
258-
delete: rusoto_s3::Delete {
259-
objects: to_delete,
260-
quiet: None,
261-
},
262-
..DeleteObjectsRequest::default()
263-
})
264-
.await?;
265-
266-
if let Some(errs) = resp.errors {
267-
for err in &errs {
268-
log::error!("error deleting file from s3: {:?}", err);
253+
if !to_delete.is_empty() {
254+
let resp = self
255+
.s3
256+
.client
257+
.delete_objects(DeleteObjectsRequest {
258+
bucket: self.s3.bucket.clone(),
259+
delete: rusoto_s3::Delete {
260+
objects: to_delete,
261+
quiet: None,
262+
},
263+
..DeleteObjectsRequest::default()
264+
})
265+
.await?;
266+
267+
if let Some(errs) = resp.errors {
268+
for err in &errs {
269+
log::error!("error deleting file from s3: {:?}", err);
270+
}
271+
272+
anyhow::bail!("deleting from s3 failed");
269273
}
270-
271-
anyhow::bail!("deleting from s3 failed");
272274
}
273275

274276
continuation_token = list.next_continuation_token;

0 commit comments

Comments
 (0)