From 210d7a4d5975cf6ed5794f244c6cf92364c65e40 Mon Sep 17 00:00:00 2001 From: weisd Date: Fri, 13 Sep 2024 14:15:09 +0800 Subject: [PATCH] fix:delete_bucket skip when volume not empty --- ecstore/src/peer.rs | 4 ++-- ecstore/src/store.rs | 18 +++++++++--------- rustfs/src/grpc.rs | 8 ++++++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/ecstore/src/peer.rs b/ecstore/src/peer.rs index 79dc6aec3..343817b79 100644 --- a/ecstore/src/peer.rs +++ b/ecstore/src/peer.rs @@ -146,7 +146,7 @@ impl S3PeerSys { Ok(buckets) } - async fn delete_bucket(&self, bucket: &str, opts: &DeleteBucketOptions) -> Result<()> { + pub async fn delete_bucket(&self, bucket: &str, opts: &DeleteBucketOptions) -> Result<()> { let mut futures = Vec::with_capacity(self.clients.len()); for cli in self.clients.iter() { futures.push(cli.delete_bucket(bucket, &opts)); @@ -391,7 +391,7 @@ impl PeerS3Client for LocalPeerS3Client { let mut idx = 0; for err in errs { if err.is_none() && recreate { - let _ = self.local_disks[idx].make_volume(bucket).await; + let _ = local_disks[idx].make_volume(bucket).await; } idx += 1; diff --git a/ecstore/src/store.rs b/ecstore/src/store.rs index bc4dca208..44473c3b0 100644 --- a/ecstore/src/store.rs +++ b/ecstore/src/store.rs @@ -488,6 +488,15 @@ impl StorageAPI for ECStore { Ok(buckets) } + + async fn delete_bucket(&self, bucket: &str, opts: &DeleteBucketOptions) -> Result<()> { + self.peer_sys.delete_bucket(bucket, opts).await?; + + // 删除meta + self.delete_all(RUSTFS_META_BUCKET, format!("{}/{}", BUCKET_META_PREFIX, bucket).as_str()) + .await?; + Ok(()) + } async fn make_bucket(&self, bucket: &str, opts: &MakeBucketOptions) -> Result<()> { // TODO: check valid bucket name @@ -781,13 +790,4 @@ impl StorageAPI for ECStore { } unimplemented!() } - - async fn delete_bucket(&self, bucket: &str, opts: &DeleteBucketOptions) -> Result<()> { - self.peer_sys.delete_bucket(bucket, opts).await?; - - // 删除meta - self.delete_all(RUSTFS_META_BUCKET, format!("{}/{}", BUCKET_META_PREFIX, bucket).as_str()) - .await?; - Ok(()) - } } diff --git a/rustfs/src/grpc.rs b/rustfs/src/grpc.rs index 7afc67000..6e4747fe3 100644 --- a/rustfs/src/grpc.rs +++ b/rustfs/src/grpc.rs @@ -3,7 +3,7 @@ use ecstore::{ erasure::{ReadAt, Write}, peer::{LocalPeerS3Client, PeerS3Client}, store::{all_local_disk_path, find_local_disk}, - store_api::{BucketOptions, FileInfo, MakeBucketOptions}, + store_api::{BucketOptions, DeleteBucketOptions, FileInfo, MakeBucketOptions}, }; use tonic::{Request, Response, Status}; use tracing::{debug, error, info}; @@ -188,7 +188,11 @@ impl Node for NodeService { debug!("make bucket"); let request = request.into_inner(); - match self.local_peer.delete_bucket(&request.bucket).await { + match self + .local_peer + .delete_bucket(&request.bucket, &DeleteBucketOptions { force: false }) + .await + { Ok(_) => Ok(tonic::Response::new(DeleteBucketResponse { success: true, error_info: None,