4
我想在Zookeeper中實施屏障。當有少量節點需要加入才能通過障礙時,我的實現始終工作。然而,當我用100多個需要加入障礙的節點測試我的實現時,大約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)爲罕見失敗發生。一旦所有節點加入,它就會一直通過屏障。我確定同步過程方法可以解決這個問題,但它沒有。任何人有任何這方面的經驗,或一個想法我可能做錯了什麼?
對不起,在代碼格式。我不確定那是怎麼發生的。我希望這不會讓你無法閱讀。 –
發佈你的代碼的其餘部分,這是不足以找出發生了什麼。 – sbridges