GraphML によるトポロジー指定のサンプルでは、SystemServer の接続設定をローカルの GraphML 文字列から構築した。
実環境では各ノードプログラムは分散するので、GraphML の管理が課題となる。これを kvspace を用いることで一元的に配布するようにしたものが、KvsServer である。
KvsServer を利用したアプリケーションサンプルが、sample/kvs_system にある。これを見ながら KvsServer の使い方を学ぶ。
サンプルコードは main() でほとんどの処理をすませている。コマンドライン引数の処理などがあって分かりにくいが、次のような処理フローになっている。
main() の前半はコマンドライン引数を解析して KvsServerConfig を構築している。
kvspace サーバーのアドレスとポート、GraphML の登録されているキー、自ノードの名前を設定している。
nine::kvspace::KvsServerConfig cfg; cfg.kvs_address = addr; cfg.kvs_port = port; cfg.kvs_key = *argv++; cfg.myname = *argv++;
続いて、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);
}