4. ri_intf 構造体

4.1. 定義

ri_intf 構造体の定義は以下の通りである。

// Request Inspector Interface
struct ri_intf {
    const char const * name;
    struct ri * (* initialize) (int sock, uint32_t addr, uint16_t port, char * optarg);
    int (* run) (struct ri *);
    int (* stop) (struct ri *);
    int (* add_node) (struct ri *, uint32_t ipaddr);
    int (* remove_node) (struct ri *, uint32_t ipaddr);
    int (* finalize) (struct ri *);
    const char const* (* usage) ();
};

メンバ変数の詳細については本章の各項で解説する。

4.2. name

RI の名称である。ここで設定した名前は dtsadmin コマンドなどで RI を指定する際に使用する。

4.3. initialize

RI の初期処理を行う。

struct ri * initialize (int sock, uint32_t addr, uint16_t port, char * ri_optarg)
  • sock

    リクエストを受け付けるソケットディスクリプタ。RI の全スレッドが共有する。

  • addr

    デフォルトの転送先ホストの IP アドレス。 RI 内で転送先ノードが1つも登録されていない状態でリクエストを受け付けた場合の転送先ホストとして使用する。

  • port

    転送先ノードの待ち受けポート番号。

  • ri_optarg

    RI 固有のパラメータ文字列。dtsadmin コマンド -A オプションのサブオプション -s の パラメータがそのまま渡される。

initialize では主に以下の処理を実行する。

4.4. run

RI 全スレッドを作成する。 スレッドの挙動に関しては、 メインスレッド処理概要 にて記述する。

4.5. stop

RI 全スレッドの停止フラグを立てる。 フラグが立ったスレッドの挙動に関しては、 メインスレッド処理概要 にて記述する。

4.6. add_node

ノードリスト へノードを追加する。 詳しくは Dispatcher へ記述する。

4.7. remove_node

ノードリスト からノードを削除する。 詳しくは Dispatcher へ記述する。

4.8. finalize

finalize では RI の終了処理として主に以下の処理を実行する。

  • RI 全スレッドの停止確認
  • ソケットの close(2)
  • allocate した変数の free(2)

4.9. usage

dtsd コマンドの –help オプションなどで表示するための文字列を返す。 以下に例を示す。

const char usage_str[] = "[options]\n"
  "\n"
  "Options:\n"
  "  -c threads      specifies the number of server threads (default: 1)\n"
  "  -d dispatcher   specifies the dispatching algorithm (default: "
  DEFAULT_DISPATCHER ")\n\n";