1

私が欲しいもの:

  1. ZooKeeper でトランザクションを使用できるようにしたい
  2. 私は彼らが実際に完了することを望みます

ここで、最初に Apache (旧 Netflix) Curator ライブラリを使用してみましたが、例に従ってトランザクションを実行すると、次のようになります。

curator.inTransaction().create().forPath(path, data)
      .and().commit();

そして、そこに行き詰まるだけです(トランザクションにはアイテムが1つしかないため、txnは不要ですが、物事をシンプルに保とうとしています)。そこで、未加工の ZooKeeper API を使用して、より完全なテスト シナリオを作成することにしました。

final CountDownLatch connect = new CountDownLatch(1);
ZooKeeper z = new ZooKeeper("localhost:2181", 60000, new Watcher() {
  @Override
  public void process(WatchedEvent arg0) {
    System.err.println("EVENT! " + arg0);
    connect.countDown();
  }
});

List<ACL> acl = ImmutableList.of(new ACL(0777, new Id("world", "anyone")));
connect.await();
System.err.println("CREATING");
z.multi(ImmutableList.of(
    Op.create("/foo", "DATA".getBytes(), acl, CreateMode.PERSISTENT)));

また、印刷後に死人のようにぶら下がっています

EVENT! WatchedEvent state:SyncConnected type:None path:null
CREATING

Zookeeper サーバーに関しては、1 つのノードとして実行されているため、他のノードと競合する必要はありません。/foo はツリーに表示されません-zooinspectorを使用して確認します。トランザクションなしで ZK を使用すると、すべて正常に動作します。私は webz を探し回りましたが、関連するものは何も見つかりませんでした。明らかな何かが欠けていますか?

4

1 に答える 1

4

ZooKeeper >= 3.4 を使用する必要があることがわかりました。そうしないと、うまくいきません。ZooKeeper 3.3 はただたむろし、トランザクションが与えられると何もしません。

于 2014-02-10T23:05:13.743 に答える