コンテンツにスキップ

WARM_RESTART テーブル

概要

ホットフィックスやソフトウェアアップグレード時にデータプレーンを落とさずコントロールプレーンを再起動するためのモジュール別 warm-restart 設定を持つテーブル3。モジュール (bgp/teamd/swss/system) ごとに enable 状態と各種タイマを保持する。

warmboot-finalizer / 各プロセス (bgpd, teamd, orchagent, neighsyncd 等) が起動時に CONFIG_DB から読み出し、再収束の待ち時間を決める。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>WARM_RESTART")]
  DM["warmboot-finalizer"]
  CDB --> DM

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

WARM_RESTART|<module>
  • <module>: bgp, teamd, swss, system の enum。

フィールド

フィールド 制約 説明
module (key) enum bgp/teamd/swss/system warm-restart 対象モジュール
bgp_eoiu boolean module=bgp のみ BGP End-of-Initial-Update シグナルの有効化
bgp_timer uint16 (1..3600) module=bgp のみ BGP の再収束待ちタイマ [秒]
teamsyncd_timer uint16 (1..3600) module=teamd のみ teamsyncd の再同期猶予 [秒]
neighsyncd_timer uint16 (1..9999) module=swss のみ neighsyncdARP/NDP 再収束タイマ [秒]

なお STATE_DB:WARM_RESTART_TABLE (state DB) は restart 進捗のランタイム表現で、CONFIG_DB のこのテーブルとは別物。enable フラグなどシステム全体の制御は STATE_DB 側の WARM_RESTART_ENABLE_TABLE および config warm_restart enable で扱う実装が多い。

制約

  • 各タイマには must 句でモジュールとの整合性チェックがかかる(例: bgp_timermodule = 'bgp' でないと許可されない)。
  • タイマ範囲を外れる値は YANG validation 段で拒否される。

購読者

  • bgpcfgd: bgp_timer / bgp_eoiu を vtysh の bgp graceful-restart 系設定に変換
  • teamd (LACP): teamsyncd_timer を読み、LAG 再収束タイムアウトとして使用
  • orchagent / neighsyncd / fpmsyncd: neighsyncd_timerARP/route の reconciliation 待ちに使用
  • warmboot-finalizer.sh: WARM_RESTART_TABLE 状態を見ながら最終的に dataplane を unfreeze

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: DEVICE_METADATA (synchronous_mode, warm-restart enable 補助)
  • 関連 CLI: config warm_restart enable, config warm_restart bgp_timer, config warm_restart neighsyncd_timer, show warm_restart
  • 関連 YANG: sonic-warm-restart

値依存挙動マトリクス

フィールド 実挙動
module bgp bgp_eoiu / bgp_timer が有効。bgpcfgd が vtysh の bgp graceful-restart restart-time <val> に変換
module teamd teamsyncd_timer が有効。teamd が LAG 再収束タイムアウトとして使用
module swss neighsyncd_timer が有効。neighsyncd が ARP/NDP reconciliation 待ちに使用
module system システム全体の warm-restart 制御。個別タイマフィールドなし
module その他 YANG バリデーションで reject
bgp_eoiu true BGP End-of-Initial-Update シグナルを待って再収束完了と判定
bgp_eoiu false EOIU なしで再収束完了と判定
bgp_timer 13600 (秒) BGP graceful-restart のタイムアウト。典型値 300 秒
bgp_timer module≠bgp YANG must 違反で reject
teamsyncd_timer 13600 (秒) LAG 再収束タイムアウト
teamsyncd_timer module≠teamd YANG must 違反で reject
neighsyncd_timer 19999 (秒) ARP/NDP reconciliation 待ちタイムアウト。典型値 110 秒
neighsyncd_timer module≠swss YANG must 違反で reject

enable フィールドについて

CONFIG_DB の WARM_RESTART テーブルに enable フィールドは存在しない。enable/disable は STATE_DB の WARM_RESTART_ENABLE_TABLEconfig warm_restart enable コマンドで制御する。

例外条件・特殊挙動

  • module 列挙値 (YANG): bgp / teamd / swss / system のみ許可。それ以外は YANG バリデーションで reject される1
  • フィールドとモジュールの対応 (YANG must):
  • bgp_eoiu / bgp_timer: must "current()/../module = 'bgp'" — bgp 以外のモジュールで設定すると "bgp_timer is only supported for module bgp." エラー1
  • teamsyncd_timer: must "current()/../module = 'teamd'"1
  • neighsyncd_timer: must "current()/../module = 'swss'"1
  • タイマー範囲 (YANG):
  • bgp_timer / teamsyncd_timer: 1..3600 — 範囲外は "Timer must be 1..3600" エラー1
  • neighsyncd_timer: 1..99991
  • YANG 制約違反: sonic-cfggen / config load の段階でエラーが発生し DB には書き込まれない。
  • warm-restart 有効化ログ: enabletrue の場合、各 mgr が起動後に SWSS_LOG_NOTICE("warmstart state set to REPLAYED/RECONCILED") を記録する2

関連リファレンス

引用元

運用ヒント

典型値

  • key 形式: WARM_RESTART|<module> (bgp, swss, teamd, system)。
  • enable: true / false
  • bgp_timer: 300、neighsyncd_timer: 110。

よくある誤設定

  • enable: true のまま長時間運用したまま config save し忘れて再起動すると warm-restart 状態が不整合になる。

確認コマンド

sonic-db-cli CONFIG_DB keys 'WARM_RESTART|*'
show warm_restart config
show warm_restart state