Newer
Older
TelosDB / docs / plans / folder_monitor_enhancements.md

計画: フォルダ監視の拡張

目的

現在の RecommendedWatcher(ネイティブ監視)一本の実装を拡張し、ネットワーク FS 対応・パフォーマンス改善・エラーハンドリング強化を行う。

関連仕様: 14_folder_monitor.md


1. PollWatcher フォールバック(ネットワーク FS 対応)

背景

多くのネットワーク FS(SMB/CIFS・NFS 等)では RecommendedWatcher のネイティブ通知が発火しない(notify Known Problems)。WSL 上で Windows パスを監視する場合も同様。

方針

RecommendedWatcher が使えない環境では PollWatcher にフォールバックする。

条件 Watcher
ローカル FS RecommendedWatcher(ネイティブ)
SMB/CIFS・NFS 等 PollWatcherpoll_interval: 30s
WSL 上の Windows パス PollWatcher

ネットワークパスの判定

以下のいずれかで判定する:

  • パス prefix: Windows の \\(UNC)、Linux の /mnt//media/、macOS の /Volumes/
  • watch 登録結果: RecommendedWatcherwatch() 失敗時、または一定時間イベントが来ない場合にフォールバック
  • OS マウント情報: /proc/mounts(Linux)、getfsstat(macOS)等で判定(任意の拡張)

notify Config

オプション 用途 想定値
with_poll_interval(dur) 再スキャン間隔 30 秒(大容量ツリーは 60 秒)
with_compare_contents(bool) mtime が信用できない FS 向け(/proc 等) 通常 false

2. 大容量フォルダの初期スキャン

問題

モニター先追加時の初期スキャンは再帰走査 + 逐次取込のため、大量ファイルがあると長時間かかる。

対策案

  • プログレス表示(取込済み / 全体のカウントを UI に送信)
  • バッチ制御(一定数ごとに yield して他の処理をブロックしない)
  • 初期スキャンをバックグラウンドタスク化し、監視は先に開始する

3. 権限エラー時の UI フィードバック

問題

監視対象フォルダへの読み取り権限がない場合、watch()read_dir() がエラーを返すが、ユーザーへの通知が log::warn のみ。

対策案

  • 設定保存時にパスの存在・読み取り権限をチェックし、UI にエラーを表示
  • 監視開始時のエラーをフロントに通知し、設定パネルで該当行をハイライト

4. パス正規化

問題

シンボリックリンク・ジャンクション・バインドマウントを経由した場合、同一ファイルが異なるパスで検知され、二重登録になる可能性がある。

対策案

  • std::fs::canonicalize() でパスを正規化してから DB パスと照合
  • Config::with_follow_symlinks(false) でリンクをたどらない選択肢

優先度

項目 優先度
PollWatcher フォールバック
大容量フォルダ初期スキャン
権限エラー UI
パス正規化