Skip to content

[2650-l1] reload keep/add/remove 差集计算 #2659

Description

@Takuka0311

目标

reload 时按配置计算 keep / add / remove 差集(旧∩新 = keep,零 syscall),替换现有「全量重扫」语义:未变目录不触发 syscall、新增目录才 add_watch、不再被引用的目录进入待删集合。

关联:Discussion #2650 线 3 步骤 L1;Epic #2651

范围锁

允许改:

  • core/file_server/FileServer.cppResume() :102-128 引入 diff 入口)
  • core/file_server/ConfigManager.cppRegisterHandlers() :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
    

依赖

Metadata

Metadata

Assignees

No one assigned

    Labels

    epic属于某个 Epic 演进epic:blockedEpic: 被依赖阻塞,暂不可派发

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions