🟡 [M7] 并发缓存保存共享同一临时文件路径 #17

Closed
opened 2026-06-03 13:53:57 +08:00 by dailz · 1 comment
Owner

文件: core/io/index_cache.rs:25-31
分类: 并发 / 缓存

问题: 缓存保存使用固定临时路径 dest.with_extension("index.tmp"),并发保存会互相覆盖或竞争 rename。

建议修复: 每个写入方使用唯一临时文件名,再 atomic rename。

**文件**: `core/io/index_cache.rs:25-31` **分类**: 并发 / 缓存 **问题**: 缓存保存使用固定临时路径 `dest.with_extension("index.tmp")`,并发保存会互相覆盖或竞争 rename。 **建议修复**: 每个写入方使用唯一临时文件名,再 atomic rename。
dailz added the area/ioseverity/mediumbug labels 2026-06-03 13:53:57 +08:00
dailz closed this issue 2026-06-09 16:13:50 +08:00
Author
Owner

修复方案

根因: IndexCache::save_with_hash()save() 使用固定的 .index.tmp 临时路径,后台索引线程和 TUI 主线程并发调用时 File::create 截断对方数据。

修复: 用 tempfile::Builder 为每次 save 创建唯一临时文件,消除路径碰撞。

改动: 新增 write_cache_atomically() 辅助函数;两个 save 方法统一调用;tempfile 移至 [dependencies];新增 2 个并发测试。

Commit: 2cebbd9

## 修复方案 **根因**: `IndexCache::save_with_hash()` 和 `save()` 使用固定的 `.index.tmp` 临时路径,后台索引线程和 TUI 主线程并发调用时 `File::create` 截断对方数据。 **修复**: 用 `tempfile::Builder` 为每次 save 创建唯一临时文件,消除路径碰撞。 **改动**: 新增 `write_cache_atomically()` 辅助函数;两个 save 方法统一调用;`tempfile` 移至 `[dependencies]`;新增 2 个并发测试。 **Commit**: 2cebbd9
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/logViewer#17