Zookeeper障碍实施

时间:2011-06-25 20:16:52

标签: apache-zookeeper

我正在尝试在Zookeeper中实现一个屏障。当有少量节点需要加入以传递障碍时,我的实现始终有效。但是,当我测试我的实现时,100个节点需要加入屏障,大约1%的时间似乎其中一个节点缺少最后一个观察者事件,而不是检查是否有子节点数。屏障节点已经改变。

我甚至在观察者上同步了处理方法,但这并没有改变任何东西。下面是我的流程方法的代码,以及检查是否需要继续前进的逻辑。

Watcher进程:

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个就位,一旦所有节点都加入,它总是通过屏障。我确信同步过程方法会解决这个问题,但事实并非如此。任何人都有这方面的经验,或者我可能做错了什么想法?

1 个答案:

答案 0 :(得分:3)

您可以将您的实施与netflix-curator进行比较,其中distributed barrier已经实施。