todo:put_object_part

This commit is contained in:
weisd
2024-07-09 10:47:44 +08:00
parent 365aa7e368
commit 13b9c0ef34
3 changed files with 31 additions and 9 deletions
+16 -4
View File
@@ -24,7 +24,7 @@ use crate::{
endpoint::{Endpoint, Endpoints}, endpoint::{Endpoint, Endpoints},
file_meta::FileMeta, file_meta::FileMeta,
format::{DistributionAlgoVersion, FormatV3}, format::{DistributionAlgoVersion, FormatV3},
store_api::FileInfo, store_api::{FileInfo, RawFileInfo},
utils, utils,
}; };
@@ -218,6 +218,7 @@ impl LocalDisk {
Ok(()) Ok(())
} }
/// read xl.meta raw data
async fn read_raw( async fn read_raw(
&self, &self,
bucket: &str, bucket: &str,
@@ -480,7 +481,7 @@ impl DiskAPI for LocalDisk {
fs::write(&src_file_path, fm_data).await?; fs::write(&src_file_path, fm_data).await?;
let no_inline = src_data_path.has_root() && fi.data.is_empty() && fi.size > 0; let no_inline = src_data_path.has_root() && fi.data.is_none() && fi.size > 0;
if no_inline { if no_inline {
self.rename_all(&src_data_path, &dst_data_path, &skipParent).await?; self.rename_all(&src_data_path, &dst_data_path, &skipParent).await?;
} }
@@ -566,7 +567,7 @@ impl DiskAPI for LocalDisk {
org_volume: &str, org_volume: &str,
volume: &str, volume: &str,
path: &str, path: &str,
version_id: &str, version_id: Uuid,
opts: ReadOptions, opts: ReadOptions,
) -> Result<FileInfo> { ) -> Result<FileInfo> {
let file_path = self.get_object_path(volume, path)?; let file_path = self.get_object_path(volume, path)?;
@@ -576,7 +577,18 @@ impl DiskAPI for LocalDisk {
let (data, _) = self.read_raw(volume, file_dir, file_path, read_data).await?; let (data, _) = self.read_raw(volume, file_dir, file_path, read_data).await?;
unimplemented!() let meta = FileMeta::unmarshal(&data)?;
let fi = meta.into_fileinfo(volume, path, version_id, false, true)?;
Ok(fi)
}
async fn read_xl(&self, volume: &str, path: &str, read_data: bool) -> Result<RawFileInfo> {
let file_path = self.get_object_path(volume, path)?;
let file_dir = self.get_bucket_path(volume)?;
let (buf, _) = self.read_raw(volume, file_dir, file_path, read_data).await?;
Ok(RawFileInfo { buf })
} }
} }
+4 -2
View File
@@ -4,8 +4,9 @@ use anyhow::{Error, Result};
use bytes::Bytes; use bytes::Bytes;
use time::OffsetDateTime; use time::OffsetDateTime;
use tokio::io::DuplexStream; use tokio::io::DuplexStream;
use uuid::Uuid;
use crate::store_api::FileInfo; use crate::store_api::{FileInfo, RawFileInfo};
#[async_trait::async_trait] #[async_trait::async_trait]
pub trait DiskAPI: Debug + Send + Sync + 'static { pub trait DiskAPI: Debug + Send + Sync + 'static {
@@ -34,9 +35,10 @@ pub trait DiskAPI: Debug + Send + Sync + 'static {
org_volume: &str, org_volume: &str,
volume: &str, volume: &str,
path: &str, path: &str,
version_id: &str, version_id: Uuid,
opts: ReadOptions, opts: ReadOptions,
) -> Result<FileInfo>; ) -> Result<FileInfo>;
async fn read_xl(&self, volume: &str, path: &str, read_data: bool) -> Result<RawFileInfo>;
} }
pub struct VolumeInfo { pub struct VolumeInfo {
+11 -3
View File
@@ -13,6 +13,8 @@ pub const BLOCK_SIZE_V2: usize = 1048576; // 1M
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct FileInfo { pub struct FileInfo {
pub name: String,
pub volume: String,
pub version_id: Uuid, pub version_id: Uuid,
pub erasure: ErasureInfo, pub erasure: ErasureInfo,
pub deleted: bool, pub deleted: bool,
@@ -20,7 +22,7 @@ pub struct FileInfo {
pub data_dir: Uuid, pub data_dir: Uuid,
pub mod_time: OffsetDateTime, pub mod_time: OffsetDateTime,
pub size: usize, pub size: usize,
pub data: Vec<u8>, pub data: Option<Vec<u8>>,
pub fresh: bool, // indicates this is a first time call to write FileInfo. pub fresh: bool, // indicates this is a first time call to write FileInfo.
} }
@@ -42,6 +44,8 @@ impl Default for FileInfo {
size: Default::default(), size: Default::default(),
data: Default::default(), data: Default::default(),
fresh: Default::default(), fresh: Default::default(),
name: Default::default(),
volume: Default::default(),
} }
} }
} }
@@ -62,7 +66,7 @@ impl FileInfo {
}; };
Self { Self {
erasure: ErasureInfo { erasure: ErasureInfo {
algorithm: ERASURE_ALGORITHM, algorithm: String::from(ERASURE_ALGORITHM),
data_blocks: data_blocks, data_blocks: data_blocks,
parity_blocks: parity_blocks, parity_blocks: parity_blocks,
block_size: BLOCK_SIZE_V2, block_size: BLOCK_SIZE_V2,
@@ -89,11 +93,15 @@ impl FileInfo {
} }
} }
pub struct RawFileInfo {
pub buf: Vec<u8>,
}
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]
// ErasureInfo holds erasure coding and bitrot related information. // ErasureInfo holds erasure coding and bitrot related information.
pub struct ErasureInfo { pub struct ErasureInfo {
// Algorithm is the String representation of erasure-coding-algorithm // Algorithm is the String representation of erasure-coding-algorithm
pub algorithm: &'static str, pub algorithm: String,
// DataBlocks is the number of data blocks for erasure-coding // DataBlocks is the number of data blocks for erasure-coding
pub data_blocks: usize, pub data_blocks: usize,
// ParityBlocks is the number of parity blocks for erasure-coding // ParityBlocks is the number of parity blocks for erasure-coding