kvspace によるトポロジー指定

kvspace からのグラフ設定の取得

GraphML によるトポロジー指定のサンプルでは、SystemServer の接続設定をローカルの GraphML 文字列から構築した。

実環境では各ノードプログラムは分散するので、GraphML の管理が課題となる。これを kvspace を用いることで一元的に配布するようにしたものが、KvsServer である。

sample/kvs_system

KvsServer を利用したアプリケーションサンプルが、sample/kvs_system にある。これを見ながら KvsServer の使い方を学ぶ。

サンプルコードは main() でほとんどの処理をすませている。コマンドライン引数の処理などがあって分かりにくいが、次のような処理フローになっている。


  1. KvsServerConfig の構築
  2. KvsServer の生成と KvsServerConfig による初期化
  3. 接続完了まで待機

KvsServerConfig の構築

main() の前半はコマンドライン引数を解析して KvsServerConfig を構築している。

kvspace サーバーのアドレスとポート、GraphML の登録されているキー、自ノードの名前を設定している。

   nine::kvspace::KvsServerConfig cfg;
   cfg.kvs_address = addr;
   cfg.kvs_port = port;
   cfg.kvs_key = *argv++;
   cfg.myname = *argv++;

KvsServer の生成と KvsServerConfig による初期化

続いて、KvsServer の構築を行っている。

   nine::kvspace::KvsServer server;
   if (! server.initialize(&cfg)) {
      return -1;
   }

接続完了まで待機

次に接続が完了するまで待機している。 接続の完了は、KvsServer::getState() が S_APP_POST_LINK となることで判定している。

   bool bLink = false;
   while (! bLink) {
      server.turn();
      nine::kvspace::KvsServer::State s = server.getState();
      switch (s) {
         case nine::kvspace::KvsServer::S_APP_POST_LINK:
            bLink = true;
            break;
      }
      nine::msleep(100);
   }