mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 09:40:32 +00:00
todo:ec decode
This commit is contained in:
@@ -133,7 +133,7 @@ impl StorageAPI for Sets {
|
||||
async fn get_object_info(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result<ObjectInfo> {
|
||||
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<GetObjectReader> {
|
||||
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<()> {
|
||||
|
||||
@@ -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!()
|
||||
|
||||
@@ -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<BucketInfo>;
|
||||
async fn get_object_info(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result<ObjectInfo>;
|
||||
async fn get_Object_reader(
|
||||
async fn get_object_reader(
|
||||
&self,
|
||||
bucket: &str,
|
||||
object: &str,
|
||||
|
||||
Reference in New Issue
Block a user