mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-10 07:06:53 +00:00
add: delete_versions
This commit is contained in:
+1
-1
@@ -23,7 +23,7 @@ http.workspace = true
|
||||
bytes.workspace = true
|
||||
futures.workspace = true
|
||||
futures-util.workspace = true
|
||||
|
||||
uuid = { version = "1.8.0", features = ["v4", "fast-rng", "serde"] }
|
||||
ecstore = { path = "../ecstore" }
|
||||
s3s = "0.10.0"
|
||||
clap = { version = "4.5.7", features = ["derive"] }
|
||||
|
||||
@@ -6,6 +6,7 @@ use ecstore::store_api::HTTPRangeSpec;
|
||||
use ecstore::store_api::MakeBucketOptions;
|
||||
use ecstore::store_api::MultipartUploadResult;
|
||||
use ecstore::store_api::ObjectOptions;
|
||||
use ecstore::store_api::ObjectToDelete;
|
||||
use ecstore::store_api::PutObjReader;
|
||||
use ecstore::store_api::StorageAPI;
|
||||
use futures::pin_mut;
|
||||
@@ -20,7 +21,9 @@ use s3s::S3;
|
||||
use s3s::{S3Request, S3Response};
|
||||
use std::fmt::Debug;
|
||||
use std::str::FromStr;
|
||||
use tracing::info;
|
||||
use transform_stream::AsyncTryStream;
|
||||
use uuid::Uuid;
|
||||
|
||||
use ecstore::error::Result;
|
||||
use ecstore::store::ECStore;
|
||||
@@ -99,7 +102,31 @@ impl S3 for FS {
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(self, req))]
|
||||
async fn delete_objects(&self, req: S3Request<DeleteObjectsInput>) -> S3Result<S3Response<DeleteObjectsOutput>> {
|
||||
let _input = req.input;
|
||||
info!("delete_objects args {:?}", req.input);
|
||||
|
||||
let DeleteObjectsInput { bucket, delete, .. } = req.input;
|
||||
|
||||
let objects: Vec<ObjectToDelete> = delete
|
||||
.objects
|
||||
.iter()
|
||||
.map(|v| {
|
||||
let version_id = v
|
||||
.version_id
|
||||
.as_ref()
|
||||
.map(|v| match Uuid::parse_str(v) {
|
||||
Ok(id) => Some(id),
|
||||
Err(_) => None,
|
||||
})
|
||||
.unwrap_or_default();
|
||||
ObjectToDelete {
|
||||
object_name: v.key.clone(),
|
||||
version_id: version_id,
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
let (dobjs, errs) = try_!(self.store.delete_objects(&bucket, objects, ObjectOptions::default()).await);
|
||||
info!("delete_objects res {:?} {:?}", &dobjs, errs);
|
||||
|
||||
let output = DeleteObjectsOutput { ..Default::default() };
|
||||
Ok(S3Response::new(output))
|
||||
|
||||
Reference in New Issue
Block a user