## 目标 reload 时按配置计算 `keep / add / remove` 差集(旧∩新 = keep,零 syscall),替换现有「全量重扫」语义:未变目录不触发 syscall、新增目录才 `add_watch`、不再被引用的目录进入待删集合。 关联:Discussion #2650 线 3 步骤 L1;Epic #2651。 ## 范围锁 **允许改:** - `core/file_server/FileServer.cpp`(`Resume()` `:102-128` 引入 diff 入口) - `core/file_server/ConfigManager.cpp`(`RegisterHandlers()` `:239` 由全量重扫改为差集驱动) - `core/file_server/WatchManager.{h,cpp}`(差集计算 keep/add/remove) - `core/unittest/file_server/` **禁止改:** - 实际的延迟移除 / 四步切换 / grace period(属 L2,本步 remove 仅产出「待删集合」,不改变实际移除时机) - 主键与归一化语义(线 2,直接复用) - W2 已建立的批量/耗时指标定义 ## 验收标准 - UT:配置从 `{/a,/b,/c}` reload 为 `{/a,/b,/d}` 时——`/a /b`(keep) **无** AddWatch、`/d`(add) **1 次** AddWatch、`/c`(remove) 进入待删集合。 - UT:keep 集合零 syscall(断言 `inotify_add_watch_total` 增量为 add 集合大小)。 - 批量与内核耗时经 W2 指标可观测(断言 `watch_reload_batch_size`)。 - 命令: ``` make core PATH_IN_DOCKER=$(pwd) ./scripts/run_core_ut.sh --gtest_filter=WatchManagerUnittest.* unittest/file_server/watch_manager_unittest ``` ## 依赖 - Blocked by: #2658 - Blocked by: #2657 - Blocked by: #2654
目标
reload 时按配置计算
keep / add / remove差集(旧∩新 = keep,零 syscall),替换现有「全量重扫」语义:未变目录不触发 syscall、新增目录才add_watch、不再被引用的目录进入待删集合。关联:Discussion #2650 线 3 步骤 L1;Epic #2651。
范围锁
允许改:
core/file_server/FileServer.cpp(Resume():102-128引入 diff 入口)core/file_server/ConfigManager.cpp(RegisterHandlers():239由全量重扫改为差集驱动)core/file_server/WatchManager.{h,cpp}(差集计算 keep/add/remove)core/unittest/file_server/禁止改:
验收标准
{/a,/b,/c}reload 为{/a,/b,/d}时——/a /b(keep) 无 AddWatch、/d(add) 1 次 AddWatch、/c(remove) 进入待删集合。inotify_add_watch_total增量为 add 集合大小)。watch_reload_batch_size)。依赖