This commit is contained in:
jabberwocky238
2026-07-07 00:18:31 +08:00
parent 1d3c32ea7b
commit 3b72884d9f
2 changed files with 31 additions and 23 deletions
+2 -2
View File
@@ -5,7 +5,7 @@
## 这一步做了什么
- 一个基于 **libfuse3** 的 C++ FUSE Daemon`etvd_fuse`),挂载一个目录,拦截全部文件系统调用。
- **透传后端(passthrough)**:所有操作转发到真实后端目录(默认 `./backend`)。这是第一阶段的后端;第二阶段会替换为 COW append-only 后端(`data.raw` + Segment + `cur` 快照FUSE 拦截层与日志层保持不变。
- **透传后端(passthrough)**:所有操作转发到真实后端目录(默认 `./backend`)。这是第一阶段的后端;第二阶段会替换为 COW append-only 后端(`data.raw` + Segment),第三阶段再引入 `cur` 快照加速读FUSE 拦截层与日志层保持不变。
- **操作日志层**:每一次拦截到的调用都结构化打印到 stderr(`[etvd] <op> <path> <detail>`),`write` 额外带 `off/size/rc` 与前 16 字节 hex 预览 —— 满足「从底层观察到每一次写入」。
- 回调里直接 log + syscall 透传,**没有额外抽象层**(FUSE3 自己的 `struct fuse_operations` 就是接口)。第二阶段做 COW 后端时再按需引入存储抽象 —— 届时 `write` 语义是 append+Segment,和现在的 pwrite 形状不同,现在猜接口多半对不上。
@@ -105,7 +105,7 @@ fusermount3 -u mnt
- **绝对路径**:libfuse3 在跑事件循环前会 `chdir("/")`,因此 daemon 在请求时解析的所有路径(后端根目录)必须是绝对路径。`main` 在挂载前把 `backend``mountpoint``realpath` 成绝对路径。
- **文件句柄**`open/create` 打开真实 fd 存入 `fuse_file_info->fh``read/write``pread/pwrite``release` 关闭。
- **锁**`lock` 回调对 `F_GETLK` 返回 `F_UNLCK`、对 `F_SETLK` 返回 0,使 SQLite 的 fcntl 建议锁在单进程下正常运行。**真实互斥留到第十阶段的分布式写租约。**
- **锁**`lock` 回调对 `F_GETLK` 返回 `F_UNLCK`、对 `F_SETLK` 返回 0,使 SQLite 的 fcntl 建议锁在单进程下正常运行。**真实互斥留到第十阶段的分布式写租约。**
- **未实现的 op**xattr / fallocate 等)保持 NULLFUSE 返回 `-ENOSYS`SQLite 等会自动回退。
## 第一阶段边界(明确不做)