From 10c949af6231f2a7874822b3244ec8a90693f0a9 Mon Sep 17 00:00:00 2001 From: weisd Date: Tue, 19 Aug 2025 16:14:59 +0800 Subject: [PATCH] fix:make bucket exists (#428) --- crates/ecstore/src/rpc/peer_s3_client.rs | 15 +++++++++------ crates/ecstore/src/store.rs | 3 +-- rustfs/src/storage/ecfs.rs | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/crates/ecstore/src/rpc/peer_s3_client.rs b/crates/ecstore/src/rpc/peer_s3_client.rs index 10a00e279..9518132db 100644 --- a/crates/ecstore/src/rpc/peer_s3_client.rs +++ b/crates/ecstore/src/rpc/peer_s3_client.rs @@ -177,15 +177,17 @@ impl S3PeerSys { let pools = cli.get_pools(); let idx = i; if pools.unwrap_or_default().contains(&idx) { - per_pool_errs.push(errors[j].as_ref()); + per_pool_errs.push(errors[j].clone()); } - // TODO: reduceWriteQuorumErrs + if let Some(pool_err) = + reduce_write_quorum_errs(&per_pool_errs, BUCKET_OP_IGNORED_ERRS, (per_pool_errs.len() / 2) + 1) + { + return Err(pool_err); + } } } - // TODO: - Ok(()) } pub async fn list_bucket(&self, opts: &BucketOptions) -> Result> { @@ -387,7 +389,6 @@ impl PeerS3Client for LocalPeerS3Client { if opts.force_create && matches!(e, Error::VolumeExists) { return Ok(()); } - Err(e) } } @@ -405,7 +406,9 @@ impl PeerS3Client for LocalPeerS3Client { } } - // TODO: reduceWriteQuorumErrs + if let Some(err) = reduce_write_quorum_errs(&errs, BUCKET_OP_IGNORED_ERRS, (local_disks.len() / 2) + 1) { + return Err(err); + } Ok(()) } diff --git a/crates/ecstore/src/store.rs b/crates/ecstore/src/store.rs index ccfba6364..574c8781f 100644 --- a/crates/ecstore/src/store.rs +++ b/crates/ecstore/src/store.rs @@ -1221,7 +1221,7 @@ impl StorageAPI for ECStore { } if let Err(err) = self.peer_sys.make_bucket(bucket, opts).await { - let err = err.into(); + let err = to_object_err(err.into(), vec![bucket]); if !is_err_bucket_exists(&err) { let _ = self .delete_bucket( @@ -1234,7 +1234,6 @@ impl StorageAPI for ECStore { ) .await; } - return Err(err); }; diff --git a/rustfs/src/storage/ecfs.rs b/rustfs/src/storage/ecfs.rs index a6031c349..ff75588f7 100644 --- a/rustfs/src/storage/ecfs.rs +++ b/rustfs/src/storage/ecfs.rs @@ -311,7 +311,7 @@ impl S3 for FS { .make_bucket( &bucket, &MakeBucketOptions { - force_create: true, + force_create: false, // TODO: force support lock_enabled: object_lock_enabled_for_bucket.is_some_and(|v| v), ..Default::default() },