コンテンツにスキップ

WATERMARK_TABLE テーブル

概要

Periodic watermark のテレメトリ周期を設定するテーブル1WatermarkOrch (orchagent) が購読し、PERIODIC_WATERMARKS テーブル (COUNTERS_DB) を指定周期で自動クリアする。FLEX_COUNTER_TABLEQUEUE_WATERMARK / PG_WATERMARK グループが enable になったときにタイマーが起動する。

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

flowchart LR
  CDB[("CONFIG_DB<br/>WATERMARK_TABLE")]
  DM["WatermarkOrch"]
  CDB --> DM
  WM["COUNTERS_DB<br/>PERIODIC_WATERMARKS"]
  DM --> WM

凡例

CONFIG_DB から COUNTERS_DB までの典型経路を示す。詳細・例外は本ページ本文を参照。

key 構造

WATERMARK_TABLE|TELEMETRY_INTERVAL

シングルトンエントリ。TELEMETRY_INTERVAL のみが有効なキー。

主要フィールド

フィールド 説明
interval uint32 (秒) periodic watermark クリア間隔。省略時は 120 秒が内部デフォルト。

YANG モデルなし。スキーマ検証は orchagent 側の to_uint<uint32_t>() によるランタイム型変換のみ。

購読者

  • WatermarkOrch (orchagent/watermarkorch.cpp): CFG_WATERMARK_TABLE_NAMESubscriberStateTable で購読。handleWmConfigUpdate()interval を受け取り SelectableTimer の周期を更新する。

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: FLEX_COUNTER_TABLEQUEUE_WATERMARK / PG_WATERMARK の enable/disable でタイマー起動/停止)
  • 関連 CLI: watermarkcfg -c <秒>(周期設定)、watermarkcfg -s(現在値表示)
  • 関連 YANG: なし(YANG モデル未定義)

コード由来の暗黙デフォルト

interval — ハードコードデフォルト 120 秒

WatermarkOrch コンストラクタ (watermarkorch.cpp:9,41) で #define DEFAULT_TELEMETRY_INTERVAL 120 をタイマー初期値として使用する。

#define DEFAULT_TELEMETRY_INTERVAL 120
// ...
auto intervT = timespec { .tv_sec = DEFAULT_TELEMETRY_INTERVAL , .tv_nsec = 0 };
m_telemetryTimer = new SelectableTimer(intervT);

WATERMARK_TABLE|TELEMETRY_INTERVAL エントリが CONFIG_DB に存在しない場合、orchagent は 120 秒を telemetry 周期として使用する。watermarkcfg -s もエントリ不在時に "Telemetry interval 120 second(s)" を表示する (watermarkcfg:show_interval())。

タイマー起動条件 — FLEX_COUNTER enable 依存

タイマーは orchagent 起動時には停止状態 (m_wmStatus = 0)。FLEX_COUNTER_TABLEQUEUE_WATERMARK または PG_WATERMARKFLEX_COUNTER_STATUSenable に変わると m_telemetryTimer->start() が呼ばれる (watermarkorch.cpp:133)。両グループとも disable になると m_telemetryTimer->stop() が呼ばれる。

インターバル変更反映タイミング — 次タイマー満了後

WATERMARK_TABLE|TELEMETRY_INTERVAL を更新しても、現在の telemetry 周期が満了するまで新インターバルは適用されない(m_timerChanged = true セット → 次の timer tick で m_telemetryTimer->reset() を呼ぶ)。

関連リファレンス

引用元


  1. WatermarkOrch 実装: sonic-swss/orchagent/watermarkorch.cpp. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/watermarkorch.cpp