MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能: - ✅ Categories/Series双视图管理(category_view.rs + import_markdown.rs) - ✅ FUSE Multi-Volume支持(tree_type参数) - ✅ SSH/SFTP/SCP/rsync协议完整实现(4042行) - ✅ NFS/SMB Module Phase 1-3完成 - ✅ Archive Module Phase 1-4完成(2916行) - ✅ Download Center API完整实现 - ✅ S3兼容API实现(560行) Git配置修正: - ✅ 删除错误origin(gitea.momentry.ddns.net) - ✅ 删除m5max128(指向机器名) - ✅ 设置origin = m5max128gitea.momentry.ddns.net/admin/markbase - ✅ 设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase 数据清理: - ✅ 删除38个临时SQLite(保留accusys.sqlite、demo.sqlite) - ✅ 删除.bak、test_*.bin、调试脚本等临时文件 - ✅ 删除临时目录(build/、download files/、raid_test/等) - ✅ 更新.gitignore排除临时文件 架构优化: - 52个文件修改,2434行新增,4739行删除 - Workspace成员整合(16个crate) - 数据库状态:accusys.sqlite保留(主demo测试) 远程同步: - ✅ 准备推送到m5max128gitea(远程Gitea) - ✅ 准备推送到m4minigitea(本地Gitea)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use super::{MemberStatus, RaidAlgorithm, RaidError, RaidLevel};
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use super::{RaidLevel, MemberStatus, RaidAlgorithm, RaidError};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct RaidMember {
|
||||
@@ -28,7 +28,7 @@ impl RaidController {
|
||||
arrays: Mutex::new(Vec::new()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn create_array(
|
||||
&self,
|
||||
level: RaidLevel,
|
||||
@@ -52,66 +52,64 @@ impl RaidController {
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
||||
let total_size = calculate_total_size(level, &members, stripe_size);
|
||||
|
||||
|
||||
let array = RaidArray {
|
||||
raid_level: level,
|
||||
members,
|
||||
stripe_size,
|
||||
total_size,
|
||||
};
|
||||
|
||||
|
||||
let array_id = format!("raid_{}", chrono::Utc::now().timestamp());
|
||||
let mut arrays = self.arrays.lock().unwrap();
|
||||
arrays.push(Arc::new(array));
|
||||
|
||||
|
||||
Ok(array_id)
|
||||
}
|
||||
|
||||
|
||||
pub fn get_array(&self, _array_id: &str) -> Option<Arc<RaidArray>> {
|
||||
let arrays = self.arrays.lock().unwrap();
|
||||
arrays.iter().find(|_a| true).cloned()
|
||||
}
|
||||
|
||||
|
||||
pub fn read(&self, array_id: &str, offset: u64, size: u64) -> Result<Vec<u8>, RaidError> {
|
||||
let array = self.get_array(array_id)
|
||||
.ok_or("RAID array not found")?;
|
||||
|
||||
let array = self.get_array(array_id).ok_or("RAID array not found")?;
|
||||
|
||||
match array.raid_level {
|
||||
RaidLevel::RAID0 => {
|
||||
let mut raid0 = super::level_0::Raid0::new(array.clone());
|
||||
raid0.read(offset, size)
|
||||
},
|
||||
}
|
||||
RaidLevel::RAID1 => {
|
||||
let mut raid1 = super::level_1::Raid1::new(array.clone());
|
||||
raid1.read(offset, size)
|
||||
},
|
||||
}
|
||||
RaidLevel::RAID5 => {
|
||||
let mut raid5 = super::level_5::Raid5::new(array.clone())?;
|
||||
raid5.read(offset, size)
|
||||
},
|
||||
}
|
||||
_ => Err("RAID level not implemented yet".into()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn write(&self, array_id: &str, offset: u64, data: &[u8]) -> Result<(), RaidError> {
|
||||
let array = self.get_array(array_id)
|
||||
.ok_or("RAID array not found")?;
|
||||
|
||||
let array = self.get_array(array_id).ok_or("RAID array not found")?;
|
||||
|
||||
match array.raid_level {
|
||||
RaidLevel::RAID0 => {
|
||||
let mut raid0 = super::level_0::Raid0::new(array.clone());
|
||||
raid0.write(offset, data)
|
||||
},
|
||||
}
|
||||
RaidLevel::RAID1 => {
|
||||
let mut raid1 = super::level_1::Raid1::new(array.clone());
|
||||
raid1.write(offset, data)
|
||||
},
|
||||
}
|
||||
RaidLevel::RAID5 => {
|
||||
let mut raid5 = super::level_5::Raid5::new(array.clone())?;
|
||||
raid5.write(offset, data)
|
||||
},
|
||||
}
|
||||
_ => Err("RAID level not implemented yet".into()),
|
||||
}
|
||||
}
|
||||
@@ -119,16 +117,12 @@ impl RaidController {
|
||||
|
||||
fn calculate_total_size(level: RaidLevel, members: &[RaidMember], _stripe_size: u64) -> u64 {
|
||||
match level {
|
||||
RaidLevel::RAID0 => {
|
||||
members.iter().map(|m| m.size).sum()
|
||||
},
|
||||
RaidLevel::RAID1 => {
|
||||
members.iter().map(|m| m.size).min().unwrap_or(0)
|
||||
},
|
||||
RaidLevel::RAID0 => members.iter().map(|m| m.size).sum(),
|
||||
RaidLevel::RAID1 => members.iter().map(|m| m.size).min().unwrap_or(0),
|
||||
RaidLevel::RAID5 => {
|
||||
let min_size = members.iter().map(|m| m.size).min().unwrap_or(0);
|
||||
min_size * (members.len() - 1) as u64
|
||||
},
|
||||
}
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user