mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 01:30:33 +00:00
test:abort_multipart_upload
This commit is contained in:
30
TODO.md
30
TODO.md
@@ -2,22 +2,22 @@
|
||||
|
||||
## 基础存储
|
||||
|
||||
- [ ] 上传同名文件时,删除旧版本文件
|
||||
- [ ] EC可用读写数量判断
|
||||
- [ ] 小文件存储到metafile, inlinedata
|
||||
- [ ] 错误类型判断,程序中判断错误类型,如何统一错误
|
||||
- [ ] 优化并发执行
|
||||
- [ ] 抽象出metafile存储
|
||||
- [ ] 代码优化
|
||||
- [ ] 上传同名文件时,删除旧版本文件
|
||||
- [ ] EC可用读写数量判断
|
||||
- [ ] 小文件存储到metafile, inlinedata
|
||||
- [ ] 错误类型判断,程序中判断错误类型,如何统一错误
|
||||
- [ ] 优化并发执行
|
||||
- [ ] 抽象出metafile存储
|
||||
- [ ] 代码优化
|
||||
|
||||
## 基础功能
|
||||
|
||||
- [ ] 桶操作
|
||||
- [x] 创建 CreateBucket
|
||||
- [x] 列表 ListBuckets
|
||||
- [ ] 桶下面的文件列表 ListObjects
|
||||
- [x] 详情 HeadBucket
|
||||
- [ ] 删除
|
||||
- [ ] 桶操作
|
||||
- [x] 创建 CreateBucket
|
||||
- [x] 列表 ListBuckets
|
||||
- [ ] 桶下面的文件列表 ListObjects
|
||||
- [x] 详情 HeadBucket
|
||||
- [ ] 删除
|
||||
- [ ] 文件操作
|
||||
- [x] 上传 PutObject
|
||||
- [ ] 大文件上传
|
||||
@@ -28,10 +28,10 @@
|
||||
- [x] 下载 GetObject
|
||||
- [ ] 复制 CopyObject
|
||||
- [ ] 详情 HeadObject
|
||||
- [ ] 删除
|
||||
- [ ] 删除
|
||||
|
||||
## 扩展功能
|
||||
|
||||
- [ ] 版本控制
|
||||
- [ ] 对象锁
|
||||
- [ ] 修复
|
||||
- [ ] 修复
|
||||
|
||||
@@ -169,7 +169,11 @@ impl StorageAPI for Sets {
|
||||
async fn new_multipart_upload(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result<MultipartUploadResult> {
|
||||
self.get_disks_by_key(object).new_multipart_upload(bucket, object, opts).await
|
||||
}
|
||||
|
||||
async fn abort_multipart_upload(&self, bucket: &str, object: &str, upload_id: &str, opts: &ObjectOptions) -> Result<()> {
|
||||
self.get_disks_by_key(object)
|
||||
.abort_multipart_upload(bucket, object, upload_id, opts)
|
||||
.await
|
||||
}
|
||||
async fn complete_multipart_upload(
|
||||
&self,
|
||||
bucket: &str,
|
||||
|
||||
@@ -217,6 +217,13 @@ impl StorageAPI for ECStore {
|
||||
}
|
||||
unimplemented!()
|
||||
}
|
||||
async fn abort_multipart_upload(&self, bucket: &str, object: &str, upload_id: &str, opts: &ObjectOptions) -> Result<()> {
|
||||
if self.single_pool() {
|
||||
return self.pools[0].abort_multipart_upload(bucket, object, upload_id, opts).await;
|
||||
}
|
||||
|
||||
unimplemented!()
|
||||
}
|
||||
async fn complete_multipart_upload(
|
||||
&self,
|
||||
bucket: &str,
|
||||
|
||||
@@ -448,6 +448,7 @@ pub trait StorageAPI {
|
||||
opts: &ObjectOptions,
|
||||
) -> Result<PartInfo>;
|
||||
async fn new_multipart_upload(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result<MultipartUploadResult>;
|
||||
async fn abort_multipart_upload(&self, bucket: &str, object: &str, upload_id: &str, opts: &ObjectOptions) -> Result<()>;
|
||||
async fn complete_multipart_upload(
|
||||
&self,
|
||||
bucket: &str,
|
||||
|
||||
@@ -433,8 +433,18 @@ impl S3 for FS {
|
||||
#[tracing::instrument(level = "debug", skip(self))]
|
||||
async fn abort_multipart_upload(
|
||||
&self,
|
||||
_req: S3Request<AbortMultipartUploadInput>,
|
||||
req: S3Request<AbortMultipartUploadInput>,
|
||||
) -> S3Result<S3Response<AbortMultipartUploadOutput>> {
|
||||
let AbortMultipartUploadInput {
|
||||
bucket, key, upload_id, ..
|
||||
} = req.input;
|
||||
|
||||
let opts = &ObjectOptions::default();
|
||||
try_!(
|
||||
self.store
|
||||
.abort_multipart_upload(bucket.as_str(), key.as_str(), upload_id.as_str(), opts)
|
||||
.await
|
||||
);
|
||||
Ok(S3Response::new(AbortMultipartUploadOutput { ..Default::default() }))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user