List of usage examples for org.apache.zookeeper Transaction setData
public Transaction setData(final String path, byte[] data, int version)
From source file:com.twitter.distributedlog.impl.federated.FederatedZKLogMetadataStore.java
License:Apache License
void createLogInNamespaceSync(URI uri, String logName) throws InterruptedException, IOException, KeeperException { Transaction txn = zkc.get().transaction(); // we don't have the zk version yet. set it to 0 instead of -1, to prevent non CAS operation. int zkVersion = null == zkSubnamespacesVersion.get() ? 0 : zkSubnamespacesVersion.get(); txn.setData(zkSubnamespacesPath, uri.getPath().getBytes(UTF_8), zkVersion); String logPath = uri.getPath() + "/" + logName; txn.create(logPath, new byte[0], zkc.getDefaultACL(), CreateMode.PERSISTENT); try {//from w w w . j a v a2 s . co m txn.commit(); // if the transaction succeed, the zk version is advanced setZkSubnamespacesVersion(zkVersion + 1); } catch (KeeperException ke) { List<OpResult> opResults = ke.getResults(); OpResult createResult = opResults.get(1); if (createResult instanceof OpResult.ErrorResult) { OpResult.ErrorResult errorResult = (OpResult.ErrorResult) createResult; if (Code.NODEEXISTS.intValue() == errorResult.getErr()) { throw new LogExistsException("Log " + logName + " already exists"); } } OpResult setResult = opResults.get(0); if (setResult instanceof OpResult.ErrorResult) { OpResult.ErrorResult errorResult = (OpResult.ErrorResult) setResult; if (Code.BADVERSION.intValue() == errorResult.getErr()) { throw KeeperException.create(Code.BADVERSION); } } throw new ZKException("ZK exception in creating log " + logName + " in " + uri, ke); } }
From source file:org.apache.distributedlog.service.placement.ZKPlacementStateManager.java
License:Apache License
@Override public void saveOwnership(TreeSet<ServerLoad> serverLoads) throws StateManagerSaveException { logger.info("saving ownership"); try {//from w w w .j av a2 s. c o m ZooKeeper zk = zkClient.get(); // use timestamp as data so watchers will see any changes byte[] timestamp = ByteBuffer.allocate(8).putLong(System.currentTimeMillis()).array(); if (zk.exists(serverLoadPath, false) == null) { //create path to rootnode if it does not yet exist createServerLoadPathIfNoExists(timestamp); } Transaction tx = zk.transaction(); List<String> children = zk.getChildren(serverLoadPath, false); HashSet<String> servers = new HashSet<String>(children); tx.setData(serverLoadPath, timestamp, -1); // trigger the watcher that data has been updated for (ServerLoad serverLoad : serverLoads) { String server = serverToZkFormat(serverLoad.getServer()); String serverPath = serverPath(server); if (servers.contains(server)) { servers.remove(server); tx.setData(serverPath, serverLoad.serialize(), -1); } else { tx.create(serverPath, serverLoad.serialize(), zkClient.getDefaultACL(), CreateMode.PERSISTENT); } } for (String server : servers) { tx.delete(serverPath(server), -1); } tx.commit(); } catch (InterruptedException | IOException | KeeperException e) { throw new StateManagerSaveException(e); } }