Pull
====

LS/RS からコンフィグを取得する処理は、 :c:func:`arms_pull` 関数1 つに集約されている。

=================== ====================================
API 名              解説
=================== ====================================
:c:func:`arms_pull` 初期化された情報を用いてPull を行う
=================== ====================================

:c:func:`arms_pull` は、LS およびRS への接続処理を適切に行い、Service-Config の取得/反映までを実行する関数である。
回線やサーバの通信タイムアウトなどが発生した場合は、この関数内で予め指定された回数のリトライを行う。

LS-Skip について
----------------

:c:func:`arms_pull` は、特に指定しない限り通常はLS に対する接続から開始するが、
LS から取得したLocation-Config をメモリ上にダンプするAPI が提供されている。
これを :c:func:`arms_pull` 実行前に libarms に読み込ませることで、LS への接続をskip し、
RS への接続から開始するようにできる。これらを実行するためのAPI は以下の通りである。

============================ ===============================================
API 名                       解説
============================ ===============================================
:c:func:`arms_dump_state`    取得したLocation-Config をメモリ上にダンプする
:c:func:`arms_restore_state` 事前にダンプされたLocation-Config を読み込む
============================ ===============================================

RS-Skip について
----------------

:c:func:`arms_pull` は、通常 RS へ接続して Service-Config を取得するが、
RS から取得した Service-Config や Push を受け付けるために必要な情報をメモリ上にダンプする Callback API が提供されている。
Callback API でメモリ上にダンプされる情報は Module Cache と呼ぶ。
この Module Cache を :c:func:`arms_pull` 実行前に libarms に読み込ませることで、RS への接続を skip し、 SA に Service-Config を反映させることができる。
これらを実行するための API は以下の通りである。

======================================= ===============================================
API 名                                  解説
======================================= ===============================================
:c:func:`arms_set_md_config_size_limit` Service-Config のサイズの上限を設定する
:c:func:`arms_restore_module`           事前にダンプされた Module Cache を設定する
:c:func:`arms_dump_module_cb_t`         Module Cache をメモリ上にダンプする
======================================= ===============================================

.. note::
  RS-Skip は、RS からの指示に基づいて行う。
  そのため、RS が RS-Skip を指示しない事が保証されている場合、 RS-Skip の実装は不要である。
