ZooKeeper をデータストアとして使用するアプリケーションを開発しています。アプリケーションのメソッドの 1 つで、オプティミスティック コンカレント コントロールを使用する必要があります。たとえば、znode データを取得する get メソッドを実装する必要があり、znode データ バージョンを楽観的同時制御チェックに使用します。私が理解していることでは、1 回の操作で znode データと znode データ バージョンを取得することはできません。znode データを更新する競合が多い場合、znode データの取得後に znode データが変更される可能性があるため、get メソッドは機能しません。だから私は尋ねています - znodeデータとznodeデータバージョン(またはznode stat)を1回の操作でその間にロックを試みることなく取得できる方法はありますか?
2471 次
2 に答える
9
Java では、必要なことを簡単に実現できます。
Stat stat = new Stat();
byte[] data = zk.getData("/path", null, stat));
stat
これは、1 回の操作で (オブジェクト内の) データとバージョン情報を読み取ります。データを書き戻すときは、読み取ったときに取得したバージョン番号を渡します。
zk.setData("/path", data, stat.getVersion());
バージョンの不一致がある場合、メソッドは をスローKeeperException.BadVersionException
し、楽観的ロックを提供します。
于 2013-10-28T14:07:20.040 に答える