2011-06-25 8 views
4

私はZookeeperで障壁を実装しようとしています。私の実装は、障壁を通過するために参加する必要があるノードの数が少ないときはいつでも動作します。しかし、障壁に参加する必要のある100人以上のノードで実装をテストすると、ノードの1つが最後のウォッチャーイベントを逃しているように見え、その1%の子どもの数が確認できません。バリアノードが変更されました。飼育係のバリアの実装

私はウォッチャーでプロセスメソッドを同期さえしましたが、それは何も変わりませんでした。以下は私のプロセスメソッドのコードと、前進する必要があるかどうかをチェックするロジックです。

ウォッチャープロセス:バリア機構を制御する

public BarrierWatcher(FastBarrier FastBarrier) { 
     this.ofb = FastBarrier; 
    } 

    @Override 
    public synchronized void process(WatchedEvent event) { 
     synchronized (ofb) { 
     ofb.notify(); 
     } 
    } 

はロジック:

BarrierWatcher bw = new BarrierWatcher(this); 
List<String> memberList = zk.getChildren(barrierPath, bw); 
synchronized(this) { 
    while (memberList.size() < numOfMembers) { 
    this.wait(1000); 
    memberList = zk.getChildren(barrierPath, bw); 
    } 
} 

代わりにちょうど()this.waitを呼び出すので、私は希少な失敗をthis.wait(1000)を追加しました発生。 1000を使用すると、すべてのノードが結合されると常にバリアを通過します。私は、プロセスメソッドを同期させることでこれを解決できると確信していましたが、それはありませんでした。誰もがこれに関する何か経験があるか、私が間違っているかもしれないアイデアを持っていますか?

+0

申し訳ありませんが、コードの書式設定にはご注意ください。それがどうして起こったのか分かりません。私はこれがあなたに読めないようにしていないことを願っています。 –

+0

あなたのコードの残りの部分を投稿してください、これは何が起こっているのか把握するのに十分ではありません。 – sbridges

答えて

関連する問題