From 111cd16827048aa5e58f77f92acda8ac831a146a Mon Sep 17 00:00:00 2001 From: weisd Date: Mon, 22 Jul 2024 15:33:41 +0800 Subject: [PATCH] todo:ec decode --- ecstore/src/sets.rs | 4 ++-- ecstore/src/store.rs | 4 ++-- ecstore/src/store_api.rs | 22 +++++++++++++++++++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/ecstore/src/sets.rs b/ecstore/src/sets.rs index fc3cd12f8..60ca10f2d 100644 --- a/ecstore/src/sets.rs +++ b/ecstore/src/sets.rs @@ -133,7 +133,7 @@ impl StorageAPI for Sets { async fn get_object_info(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result { self.get_disks_by_key(object).get_object_info(bucket, object, opts).await } - async fn get_Object_reader( + async fn get_object_reader( &self, bucket: &str, object: &str, @@ -142,7 +142,7 @@ impl StorageAPI for Sets { opts: &ObjectOptions, ) -> Result { self.get_disks_by_key(object) - .get_Object_reader(bucket, object, range, h, opts) + .get_object_reader(bucket, object, range, h, opts) .await } async fn put_object(&self, bucket: &str, object: &str, data: PutObjReader, opts: &ObjectOptions) -> Result<()> { diff --git a/ecstore/src/store.rs b/ecstore/src/store.rs index 9549246e3..0eec6455e 100644 --- a/ecstore/src/store.rs +++ b/ecstore/src/store.rs @@ -161,7 +161,7 @@ impl StorageAPI for ECStore { unimplemented!() } - async fn get_Object_reader( + async fn get_object_reader( &self, bucket: &str, object: &str, @@ -172,7 +172,7 @@ impl StorageAPI for ECStore { let object = utils::path::encode_dir_object(object); if self.single_pool() { - return self.pools[0].get_Object_reader(bucket, object.as_str(), range, h, opts).await; + return self.pools[0].get_object_reader(bucket, object.as_str(), range, h, opts).await; } unimplemented!() diff --git a/ecstore/src/store_api.rs b/ecstore/src/store_api.rs index 077f56327..e35431057 100644 --- a/ecstore/src/store_api.rs +++ b/ecstore/src/store_api.rs @@ -92,6 +92,24 @@ impl FileInfo { is_latest: self.is_latest, } } + // to_part_offset 取offset 所在的part index, 返回part index, offset + pub fn to_part_offset(&self, offset: i64) -> Result<(usize, i64)> { + if offset == 0 { + return Ok((0, 0)); + } + + let mut part_offset = offset; + for (i, part) in self.parts.iter().enumerate() { + let part_index = i; + if part_offset < part.size as i64 { + return Ok((part_index, part_offset)); + } + + part_offset -= part.size as i64 + } + + Err(Error::msg("part not found")) + } } impl Default for FileInfo { @@ -342,6 +360,7 @@ pub struct ObjectOptions { // Use the maximum parity (N/2), used when saving server configuration files pub max_parity: bool, pub mod_time: OffsetDateTime, + pub part_number: usize, } impl Default for ObjectOptions { @@ -349,6 +368,7 @@ impl Default for ObjectOptions { Self { max_parity: Default::default(), mod_time: OffsetDateTime::UNIX_EPOCH, + part_number: Default::default(), } } } @@ -403,7 +423,7 @@ pub trait StorageAPI { async fn make_bucket(&self, bucket: &str, opts: &MakeBucketOptions) -> Result<()>; async fn get_bucket_info(&self, bucket: &str, opts: &BucketOptions) -> Result; async fn get_object_info(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result; - async fn get_Object_reader( + async fn get_object_reader( &self, bucket: &str, object: &str,