はい、その状況で DHT での get (というか、そのためのルーティング) に
時間がかかるのは、離脱したノードに対して通信を試みてしまっているからです。
返答待ち (タイムアウト) 時間は、初期値は 5秒です:
src/messaging/MessagingConfiguration.java:
public final static int DEFAULT_STATIC_TIMEOUT = 5 * 1000; // msec
UDP, TCP で通信している状況では、
この値は、実際の通信遅延に応じて調整されていく (はずな) ので、
どんどん短くなるはずです。
対応方法:
・タイムアウト時間の初期値を短くする。
上記の値を小さくします。
あまりひどく小さくすると、返答が届く前に、誤って、通信が失敗した、
という判断をしてしまうかもしれません。
・通信に UDP でなくて TCP を使う。
owdhtshell コマンドの場合
「-t TCP」オプションを付けると、TCP を使うようになります。
・Chord で動作しているノードが predecessor を更新する頻度を上げる。
Chord には元来、predecessor を更新しない、という問題があります。
つまり、離脱したノードも、predecessor として永遠に保持してしまいます。
これではあんまりなので、Overlay Weaver の Chord 実装には
predecessor を更新する処理を実装してあります。
次の値を小さくすると、その更新頻度が上がります。
1 とすると、頻度が最高になります。
src/ow/routing/linearwalker/LinearWalkerConfiguration.java:
public final static int DEFAULT_UPDATE_PREDECESSOR_FREQ = 10;
Kazuyuki Shudo/首藤一幸 私をたばねないで あらせいとうの花のように
20...@shudo.net http://www.shudo.net/
> Message-ID: <b650c2c6-3c67-4cdf...@u17g2000yqi.googlegroups.com>
> From: etokoji <eto...@gmail.com>
> Date: Mon, 1 Nov 2010 18:55:58 -0700 (PDT)