运维
POSIX 测试
文件系统一致性覆盖、可复现 runner 与明确公开的限制。
BrewFS 将 POSIX 行为视为发布要求。测试计划会在 SQLite、Redis、etcd、TiKV 元数据后端和 RustFS 对象存储上检查 FUSE 与元数据行为。套件通过只代表已配置用例的证据,不代表每一种内核或 FUSE 能力都已实现。
覆盖内容
| 范围 | 示例 |
|---|---|
| 命名空间与元数据 | create、unlink、rename、硬链接、时间戳、xattr、特殊 inode、setgid 继承 |
| 权限与路径 | owner、mode、路径遍历、链接与删除行为 |
| 并发 | POSIX 字节范围锁、lookup/stat 路径、close-to-open 行为、事务型元数据更新 |
| FUSE 与写回 | truncate、flush、fsync 敏感路径、缓存失效、对象存储提交 |
当前验证覆盖
| 套件 | 范围 | 已公开结果 |
|---|---|---|
| xfstests | FUSE、元数据、锁、写回、对象存储行为 | SQLite、Redis、etcd、TiKV 均通过 708 / 708 个已配置用例 |
| pjdfstest | POSIX 路径、权限、链接、特殊节点、重命名、删除、时间戳 | Redis 与 TiKV:246 个文件、9,134 条断言 |
| LTP filesystem | Linux 文件系统场景与记录锁覆盖 | 四个后端均通过,buffered iogen01 为已记录跳过项 |
| stress-ng smoke | 短时元数据与小写入压力 | 通过,且没有残留文件 |
运行套件
# Rust 单元、集成与 feature 检查
cargo test --workspace --lib --bins -- --test-threads=1
# Redis + RustFS POSIX 套件
bash docker/compose-xfstests/run_redis_pjdfstest.sh
bash docker/compose-xfstests/run_redis_xfstests.sh
bash docker/compose-xfstests/run_redis_ltp.sh
bash docker/compose-xfstests/run_redis_stress_ng.sh --profile smoke
# 移除排除项前,先单独验证该 xfstests 用例
bash docker/compose-xfstests/run_redis_xfstests.sh --check-args "-fuse generic/091"现代 Compose runner 会在 docker/compose-xfstests/artifacts/ 下保留报告、日志和 skip-file 上下文。
明确公开的限制
generic/075继续排除。buffered FUSE 在 truncate/extend 后的 mmap 可能暴露过期 page-cache 字节;direct I/O 无法运行该 mmap 形态。- 正常 buffered profile 继续跳过 LTP
iogen01,因为 split-write/page-cache 一致性竞态仍在诊断中。 open_by_handle_at、共享 mount 传播、部分 O_DIRECT sparse-hole 用例与长时间 fsstress soak 都是已记录的排除项或手动套件。
不能因一次本地通过就移除排除项。应先在没有默认 exclude file 的条件下重跑该用例,检查产物,然后重复执行或运行完整套件,再将其提升为必需覆盖。
性能改动必须保持正确性
任何读写热路径改动都必须重新运行这些套件和性能 guard。profile 与回退预算规则见基准测试方法。

