From d748615c1f08e5af105323092eb215b00daaeac4 Mon Sep 17 00:00:00 2001 From: Shany Pozin Date: Tue, 27 Jun 2023 15:01:32 +0300 Subject: [PATCH] RemoteTimelineClient::delete_all() to use s3::delete_objects (#4461) ## Problem [#4325](https://github.com/neondatabase/neon/issues/4325) ## Summary of changes Use delete_objects() method --- libs/remote_storage/tests/test_real_s3.rs | 15 +++++++++++++++ pageserver/src/tenant/remote_timeline_client.rs | 6 ++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/libs/remote_storage/tests/test_real_s3.rs b/libs/remote_storage/tests/test_real_s3.rs index 6fe65a0362..0917bab39c 100644 --- a/libs/remote_storage/tests/test_real_s3.rs +++ b/libs/remote_storage/tests/test_real_s3.rs @@ -173,10 +173,15 @@ async fn s3_delete_objects_works(ctx: &mut MaybeEnabledS3) -> anyhow::Result<()> let path2 = RemotePath::new(&PathBuf::from(format!("{}/path2", ctx.base_prefix,))) .with_context(|| "RemotePath conversion")?; + let path3 = RemotePath::new(&PathBuf::from(format!("{}/path3", ctx.base_prefix,))) + .with_context(|| "RemotePath conversion")?; + let data1 = "remote blob data1".as_bytes(); let data1_len = data1.len(); let data2 = "remote blob data2".as_bytes(); let data2_len = data2.len(); + let data3 = "remote blob data3".as_bytes(); + let data3_len = data3.len(); ctx.client .upload(std::io::Cursor::new(data1), data1_len, &path1, None) .await?; @@ -185,8 +190,18 @@ async fn s3_delete_objects_works(ctx: &mut MaybeEnabledS3) -> anyhow::Result<()> .upload(std::io::Cursor::new(data2), data2_len, &path2, None) .await?; + ctx.client + .upload(std::io::Cursor::new(data3), data3_len, &path3, None) + .await?; + ctx.client.delete_objects(&[path1, path2]).await?; + let prefixes = ctx.client.list_prefixes(None).await?; + + assert_eq!(prefixes.len(), 1); + + ctx.client.delete_objects(&[path3]).await?; + Ok(()) } diff --git a/pageserver/src/tenant/remote_timeline_client.rs b/pageserver/src/tenant/remote_timeline_client.rs index 7808b64d35..190512f48f 100644 --- a/pageserver/src/tenant/remote_timeline_client.rs +++ b/pageserver/src/tenant/remote_timeline_client.rs @@ -862,10 +862,8 @@ impl RemoteTimelineClient { "Found {} files not bound to index_file.json, proceeding with their deletion", remaining.len() ); - for file in remaining { - warn!("Removing {}", file.object_name().unwrap_or_default()); - self.storage_impl.delete(&file).await?; - } + warn!("About to remove {} files", remaining.len()); + self.storage_impl.delete_objects(&remaining).await?; } let index_file_path = timeline_storage_path.join(Path::new(IndexPart::FILE_NAME));