append_lines 中 count_existing_lines(path).unwrap_or(0) 会在行计数失败时静默把现有行数当作 0。
append_lines
count_existing_lines(path).unwrap_or(0)
如果文件在打开后被删除、权限变化或读取失败,追加行编号会从 0 重新开始,调用方无法感知底层 I/O 错误。
crates/bench/src/data_gen.rs:90
让 count_existing_lines(path)? 向上传播错误,保持 append_lines 的 std::io::Result<()> 语义。
count_existing_lines(path)?
std::io::Result<()>
提交: f6081b9
f6081b9
1. append_lines — 先计数再打开 + 错误传播
- let existing_lines = count_existing_lines(path).unwrap_or(0); + let existing_lines = count_existing_lines(path)?;
将计数移到文件打开之前,unwrap_or(0) 改为 ? 向上传播错误,保持 std::io::Result<()> 语义。
unwrap_or(0)
?
2. count_existing_lines — 逐行传播读取错误
count_existing_lines
// 之前: reader.lines().count() 会静默丢弃每行的 I/O 错误 // 之后: 显式循环逐行 line? 传播错误 let mut count = 0u64; for line in reader.lines() { line?; count += 1; }
test_append_lines_increases_line_count
No dependencies set.
The note is not visible to the blocked user.
问题
append_lines中count_existing_lines(path).unwrap_or(0)会在行计数失败时静默把现有行数当作 0。影响
如果文件在打开后被删除、权限变化或读取失败,追加行编号会从 0 重新开始,调用方无法感知底层 I/O 错误。
位置
crates/bench/src/data_gen.rs:90建议
让
count_existing_lines(path)?向上传播错误,保持append_lines的std::io::Result<()>语义。修复方案
提交:
f6081b9改动内容
1.
append_lines— 先计数再打开 + 错误传播将计数移到文件打开之前,
unwrap_or(0)改为?向上传播错误,保持std::io::Result<()>语义。2.
count_existing_lines— 逐行传播读取错误验证
test_append_lines_increases_line_count