# クラスター機能録画

## クラスターにおける録画機能

録画機能はどのノードで録画を開始しても、セッションが存在するノードで録画が行われます。
これはリレー機能を使い複数のノードにセッションがまたがっていても同様です。

すべてのノードでセッションが破棄されたタイミングで録画も終了します。

## 録画ファイルの出力ノード

`archive-<connection_id>.json`, `archive-<connection_id>.webm` の録画ファイルは、接続を担当するノードで
出力されます。

次のような場合には同一の `recording_id` に属する録画ファイルが、
複数ノードにまたがって出力されることがありますのでご注意ください。

1. [録画機能(セッション単位)](RECORDING.html) でチャネル ID を指定して録画開始
2. ノード A に指定したチャネル ID の接続が来てしばらくして切断、録画ファイルがノード A に作られる
3. ノード A が停止
4. ノード B に指定したチャネル ID に接続が来てしばらくして切断、録画ファイルがノード B に作られる

## `report-<recording_id>.json` ファイルの出力ノード

あるチャネルに対して、 [StopRecording](API_RECORDING.html#fd0de5) API を実行した場合には録画が終了し、
`report-<recording_id>.json` ファイルが出力されます。

このファイルの出力ノードは次のとおりです。

- そのチャネルに接続したクライアントがひとつもなかった場合はどのノードで出力されるかは未定です- ただし、クラスター内のいずれかのノードで出力されます
- そのチャネルに接続中のクライアントがいる場合は、チャネルの担当ノードで出力されます
- そのチャネルに接続したクライアントが過去にいた場合は 2 パターンがありえます- クライアントが接続したノードが生存し続けている場合はそのノードで出力されます
  - ノードが落ちている、または停止した後に再起動した場合にはどのノードで出力されるかは未定です- ただし、クラスター内のいずれかのノードで出力されます

## `report-<recording_id>.json` ファイルが一時的に出力されない場合

全ノードが半数以下に所属した場合には `report-<recording_id>.json` ファイルが出力されません。

5 ノードのクラスターがあるとして、いくつか例を示します。

- ネットワーク障害が発生し、2 + 2 + 1 に分断された場合
- ノード障害(運用での停止も含む)が発生し、3 ノードが停止した場合
- ノード障害で 1 ノードが停止した状態でネットワーク障害が発生し、 2 + 2 に分断された場合

このあとに分断が解消し、過半数のグループができたあとに [StopRecording](API_RECORDING.html#fd0de5) API を
実行すると `report-<recording_id>.json` ファイルが出力されます。

## `report-<recording_id>.json` ファイルの archives の内容と実際に出力される録画ファイルが一致しない場合

録画中のノードがクラスターから分離された場合に `report-<recording_id>.json` ファイルの `archives` にすべての録画ファイルが含まれないケースがあります。

録画中のノードがクラスターから分離された場合は別のノードが `report-<recording_id>.json` ファイルを出力しますが、クラスター分離前に共有された録画情報の内容で出力し、
分離直後に作成された録画ファイルは含まれないためです。
