Files
markbase/docs/DOUBLE_IMPLEMENTATION_PLAN.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
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)
2026-06-12 12:59:54 +08:00

4.5 KiB
Raw Blame History

双方案实施计划

目标

实现两个WebDAV backend方案

  1. 方案1复制warren文件快速原型
  2. 方案2SQLite backend完整实现

方案1复制warren文件到WebDAV目录

目标

  • 快速验证WebDAV功能
  • Finder能看到warren的文件树
  • 时间30分钟

实施步骤

步骤1创建脚本复制文件

# 创建脚本scripts/copy_warren_to_webdav.sh
# 功能:
# - 使用MarkBaseFS::query_node遍历所有节点
# - 使用MarkBaseFS::read_file读取文件内容
# - 复制到data/webdav/warren对应目录结构

步骤2实现文件复制逻辑

// 创建 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

killall webdav_server
./target/release/webdav_server --user warren --port 8002

步骤5Finder验证

限制

  • 占用磁盘空间复制12659文件
  • 性能仍然受文件系统限制
  • 不是真正的虚拟文件系统

方案2实现SQLite backendDavFileSystem trait

目标

  • 真正虚拟文件系统
  • 直接使用warren.sqlite
  • 性能提升600倍
  • 时间3.5小时

实施步骤

步骤1创建MarkBaseFs模块

src/webdav/markbase_fs.rs
- 实现DavFileSystem trait
- 使用MarkBaseFS作为backend

步骤2实现DavFileSystem trait

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路径解析逻辑

// path → node_id映射
// 例如:"/Home/Movies/video.mp4"
// → 查询parent_id + label找到node_id

步骤4修改handler.rs

impl MarkBaseWebDAV {
    pub fn create_handler(&self) -> DavHandler {
        DavHandler::builder()
            .filesystem(MarkBaseDavFs::new(&self.user_id))
            .locksystem(FakeLs::new())
            .build_handler()
    }
}

步骤5编译测试

cargo build --release --bin webdav_server
cargo test --lib webdav::markbase_fs

步骤6Finder验证

优势

  • 不占用磁盘空间(不需要复制文件)
  • 性能提升600倍B-Tree索引
  • 真正虚拟文件系统
  • 符合MarkBase长期目标

实施顺序建议

推荐顺序方案2 → 方案1

原因:

  1. 方案2是核心实现解决性能问题
  2. 方案1可作为备选或原型验证
  3. 方案2完成后方案1可以删除节省空间

时间分配:

  • 方案23.5小时(核心)
  • 方案130分钟可选验证

依赖关系

方案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.rsDavDirItem/DavMetaData
  • tests/webdav_backend_test.rs单元测试

修改文件:

  • src/webdav/handler.rs替换LocalFs
  • src/webdav/mod.rs导出新模块
  • Cargo.toml可能需要新依赖

最后更新: 2026-05-18 23:30