核心功能: - ✅ 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)
207 lines
4.5 KiB
Markdown
207 lines
4.5 KiB
Markdown
# 双方案实施计划
|
||
|
||
## 目标
|
||
|
||
实现两个WebDAV backend方案:
|
||
1. 方案1:复制warren文件(快速原型)
|
||
2. 方案2:SQLite backend(完整实现)
|
||
|
||
---
|
||
|
||
## 方案1:复制warren文件到WebDAV目录
|
||
|
||
### 目标
|
||
- 快速验证WebDAV功能
|
||
- Finder能看到warren的文件树
|
||
- 时间:30分钟
|
||
|
||
### 实施步骤
|
||
|
||
**步骤1:创建脚本复制文件**
|
||
```bash
|
||
# 创建脚本:scripts/copy_warren_to_webdav.sh
|
||
# 功能:
|
||
# - 使用MarkBaseFS::query_node遍历所有节点
|
||
# - 使用MarkBaseFS::read_file读取文件内容
|
||
# - 复制到data/webdav/warren对应目录结构
|
||
```
|
||
|
||
**步骤2:实现文件复制逻辑**
|
||
```rust
|
||
// 创建 src/bin/copy_warren_files.rs
|
||
use markbase::fskit::filesystem::MarkBaseFS;
|
||
|
||
fn main() {
|
||
let fs = MarkBaseFS::new("warren", "data/users/warren.sqlite");
|
||
|
||
// 遍历所有节点
|
||
// 复制文件到 data/webdav/warren/
|
||
}
|
||
```
|
||
|
||
**步骤3:保留目录结构**
|
||
```
|
||
data/webdav/warren/
|
||
├── Home/
|
||
│ ├── Movies/
|
||
│ │ ├── video.mp4
|
||
│ ├── Marketing/
|
||
│ │ ├── doc.pdf
|
||
```
|
||
|
||
**步骤4:重启WebDAV server**
|
||
```bash
|
||
killall webdav_server
|
||
./target/release/webdav_server --user warren --port 8002
|
||
```
|
||
|
||
**步骤5:Finder验证**
|
||
- 连接 http://localhost:8002/webdav
|
||
- 验证12659文件显示
|
||
|
||
### 限制
|
||
- 占用磁盘空间(复制12659文件)
|
||
- 性能仍然受文件系统限制
|
||
- 不是真正的虚拟文件系统
|
||
|
||
---
|
||
|
||
## 方案2:实现SQLite backend(DavFileSystem trait)
|
||
|
||
### 目标
|
||
- 真正虚拟文件系统
|
||
- 直接使用warren.sqlite
|
||
- 性能提升600倍
|
||
- 时间:3.5小时
|
||
|
||
### 实施步骤
|
||
|
||
**步骤1:创建MarkBaseFs模块**
|
||
```
|
||
src/webdav/markbase_fs.rs
|
||
- 实现DavFileSystem trait
|
||
- 使用MarkBaseFS作为backend
|
||
```
|
||
|
||
**步骤2:实现DavFileSystem trait**
|
||
```rust
|
||
use dav_server::DavFileSystem;
|
||
use crate::fskit::filesystem::MarkBaseFS;
|
||
|
||
pub struct MarkBaseDavFs {
|
||
markbase_fs: MarkBaseFS,
|
||
}
|
||
|
||
impl DavFileSystem for MarkBaseDavFs {
|
||
fn read_dir(&self, path: &str) -> Vec<DavDirItem> {
|
||
// 使用MarkBaseFS::query_children()
|
||
// 转换为DavDirItem
|
||
}
|
||
|
||
fn get_file(&self, path: &str) -> Box<dyn DavFile> {
|
||
// 使用MarkBaseFS::read_file()
|
||
// 返回文件内容
|
||
}
|
||
|
||
fn metadata(&self, path: &str) -> DavMetaData {
|
||
// 使用MarkBaseFS::query_node()
|
||
// 返回文件元数据
|
||
}
|
||
}
|
||
```
|
||
|
||
**步骤3:路径解析逻辑**
|
||
```rust
|
||
// path → node_id映射
|
||
// 例如:"/Home/Movies/video.mp4"
|
||
// → 查询parent_id + label找到node_id
|
||
```
|
||
|
||
**步骤4:修改handler.rs**
|
||
```rust
|
||
impl MarkBaseWebDAV {
|
||
pub fn create_handler(&self) -> DavHandler {
|
||
DavHandler::builder()
|
||
.filesystem(MarkBaseDavFs::new(&self.user_id))
|
||
.locksystem(FakeLs::new())
|
||
.build_handler()
|
||
}
|
||
}
|
||
```
|
||
|
||
**步骤5:编译测试**
|
||
```bash
|
||
cargo build --release --bin webdav_server
|
||
cargo test --lib webdav::markbase_fs
|
||
```
|
||
|
||
**步骤6:Finder验证**
|
||
- 连接 http://localhost:8002/webdav
|
||
- 验证12659文件显示(<3秒)
|
||
|
||
### 优势
|
||
- 不占用磁盘空间(不需要复制文件)
|
||
- 性能提升600倍(B-Tree索引)
|
||
- 真正虚拟文件系统
|
||
- 符合MarkBase长期目标
|
||
|
||
---
|
||
|
||
## 实施顺序建议
|
||
|
||
**推荐顺序:方案2 → 方案1**
|
||
|
||
**原因:**
|
||
1. 方案2是核心实现(解决性能问题)
|
||
2. 方案1可作为备选或原型验证
|
||
3. 方案2完成后,方案1可以删除(节省空间)
|
||
|
||
**时间分配:**
|
||
- 方案2:3.5小时(核心)
|
||
- 方案1:30分钟(可选验证)
|
||
|
||
---
|
||
|
||
## 依赖关系
|
||
|
||
**方案1依赖:**
|
||
- MarkBaseFS已有实现(✅)
|
||
- warren.sqlite数据(✅)
|
||
- WebDAV server已运行(✅)
|
||
|
||
**方案2依赖:**
|
||
- MarkBaseFS已有实现(✅)
|
||
- dav-server库trait定义(需要查看API)
|
||
- warren.sqlite索引优化(✅ parent_id索引已创建)
|
||
|
||
---
|
||
|
||
## 待确认问题
|
||
|
||
1. **执行顺序**:先方案2还是先方案1?
|
||
2. **方案1必要性**:如果方案2成功,方案1是否还需要?
|
||
3. **性能测试**:是否需要AJA System Test验证性能?
|
||
4. **写入功能**:是否需要实现PUT写入(方案2扩展)?
|
||
|
||
---
|
||
|
||
## 文件清单
|
||
|
||
**方案1新增文件:**
|
||
- scripts/copy_warren_to_webdav.sh
|
||
- src/bin/copy_warren_files.rs(可选)
|
||
|
||
**方案2新增文件:**
|
||
- src/webdav/markbase_fs.rs(核心实现)
|
||
- src/webdav/dav_items.rs(DavDirItem/DavMetaData)
|
||
- tests/webdav_backend_test.rs(单元测试)
|
||
|
||
**修改文件:**
|
||
- src/webdav/handler.rs(替换LocalFs)
|
||
- src/webdav/mod.rs(导出新模块)
|
||
- Cargo.toml(可能需要新依赖)
|
||
|
||
---
|
||
|
||
**最后更新:** 2026-05-18 23:30
|