Merge pull request #136 from rustfs/pool-api

fix download err where versioning enable
This commit is contained in:
weisd
2024-12-02 00:05:13 +08:00
committed by GitHub
7 changed files with 86 additions and 12 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ impl VersioningApi for VersioningConfiguration {
}
fn prefix_enabled(&self, prefix: &str) -> bool {
if self.status == Some(BucketVersioningStatus::from_static(BucketVersioningStatus::ENABLED)) {
if self.status != Some(BucketVersioningStatus::from_static(BucketVersioningStatus::ENABLED)) {
return false;
}
+3
View File
@@ -399,6 +399,7 @@ impl LocalDisk {
}
/// read xl.meta raw data
#[tracing::instrument(level = "debug", skip(self, volume_dir, path))]
async fn read_raw(
&self,
bucket: &str,
@@ -460,6 +461,7 @@ impl LocalDisk {
Ok(data)
}
#[tracing::instrument(level = "debug", skip(self, volume_dir, file_path))]
async fn read_all_data_with_dmtime(
&self,
volume: &str,
@@ -1851,6 +1853,7 @@ impl DiskAPI for LocalDisk {
self.delete_file(&volume_dir, &xl_path, true, false).await
}
#[tracing::instrument(level = "debug", skip(self))]
async fn delete_versions(
&self,
volume: &str,
+1
View File
@@ -277,6 +277,7 @@ impl DiskAPI for Disk {
}
}
#[tracing::instrument(level = "debug", skip(self))]
async fn read_version(
&self,
_org_volume: &str,
+46
View File
@@ -8,6 +8,52 @@ use lazy_static::lazy_static;
use std::collections::HashMap;
use uuid::Uuid;
pub async fn del_opts(
bucket: &str,
object: &str,
vid: Option<String>,
headers: &HeaderMap<HeaderValue>,
metadata: Option<HashMap<String, String>>,
) -> Result<ObjectOptions> {
let versioned = BucketVersioningSys::prefix_enabled(bucket, object).await;
let version_suspended = BucketVersioningSys::prefix_suspended(bucket, object).await;
let vid = vid.map(|v| v.as_str().trim().to_owned());
if let Some(ref id) = vid {
if let Err(_err) = Uuid::parse_str(id.as_str()) {
return Err(Error::new(StorageError::InvalidVersionID(
bucket.to_owned(),
object.to_owned(),
id.clone(),
)));
}
if !versioned {
return Err(Error::new(StorageError::InvalidArgument(
bucket.to_owned(),
object.to_owned(),
id.clone(),
)));
}
}
let mut opts = put_opts_from_headers(headers, metadata)
.map_err(|err| Error::new(StorageError::InvalidArgument(bucket.to_owned(), object.to_owned(), err.to_string())))?;
opts.version_id = {
if is_dir_object(object) && vid.is_none() {
Some(Uuid::nil().to_string())
} else {
vid
}
};
opts.version_suspended = version_suspended;
opts.versioned = versioned;
Ok(opts)
}
pub async fn put_opts(
bucket: &str,
object: &str,
+2
View File
@@ -273,6 +273,7 @@ struct DelObj {
#[async_trait::async_trait]
impl ObjectIO for Sets {
#[tracing::instrument(level = "debug", skip(self))]
async fn get_object_reader(
&self,
bucket: &str,
@@ -285,6 +286,7 @@ impl ObjectIO for Sets {
.get_object_reader(bucket, object, range, h, opts)
.await
}
#[tracing::instrument(level = "debug", skip(self, data))]
async fn put_object(&self, bucket: &str, object: &str, data: &mut PutObjReader, opts: &ObjectOptions) -> Result<ObjectInfo> {
self.get_disks_by_key(object).put_object(bucket, object, data, opts).await
}
+1
View File
@@ -1083,6 +1083,7 @@ impl ObjectIO for ECStore {
.get_object_reader(bucket, object.as_str(), range, h, &opts)
.await
}
#[tracing::instrument(level = "debug", skip(self, data))]
async fn put_object(&self, bucket: &str, object: &str, data: &mut PutObjReader, opts: &ObjectOptions) -> Result<ObjectInfo> {
check_put_object_args(bucket, object)?;