Pull動作における通信
====================

libarms の :c:func:`arms_pull` 関数を実行すると、コンフィグ取得動作を開始する。

1. LS に対するRS 探索要求(rs-solicitation)

  サービスアダプタからLS に対してHTTPS 接続を行い、RS 接続情報を取得する。
  通信はSSLによって暗号化されるほか、認証キー(LS-SA key) によって認証が行われる。

2. RS に対するコンフィグ要求(config-solicitation)

  サービスアダプタからRS に対してHTTPS 接続を行い、設定情報を取得する。通信はSSL によって暗号化されるほか、
  認証キー(RS-SA key) によって認証が行われる。

.. image:: libarms-pull.png

冗長化への対応
--------------

RS がLS に複数台(最大で5 台まで) 登録されている場合、Pull の冗長化動作が可能である。
この場合、Pull 動作は以下のようになる。

* 初回起動時の動作

  LS から取得したRS アドレスのリストの先頭から常に接続を試みる。
  失敗した場合、[RS1 台目] → [RS2 台目] → [RS3 台目] →... のように、順に接続先を変更する。

* rs-solicitation とconfig-solcitation の切り替え

  前回のconfig-solicitation 時にどのRS で成功したか覚えておき、
  コンフィグ再取得要求(RS) によるconfig-solicitation 時はそのRS から接続を試みる。
  コンフィグ再取得要求(LS) などにより rs-solicitation を実行するとRS 情報を再取得するため、
  成功した情報はリセットされ、取得した RS アドレスのリストの先頭から常に接続を試みる。

* 再起動時の動作

  接続に成功したサーバ情報は、libarms 内部ステート情報に保存される。
  このため、 :c:func:`arms_dump_state` を使って保存した情報を :c:func:`arms_restore_state` を用いて読み込んだ場合、その後のコンフィグ取得動作時には以前成功したサーバから接続を試みることができる。

リトライ動作
------------

LS から取得したRS アドレスのリストに対する接続が全て失敗すると、
所定の間隔、回数(LS にて設定するパラメータ) でリトライを行う。
RS アドレスのリストが2 台で、リトライ回数が5 回だとすると、2 × 5 で、計10 回の接続を試みることになる。

