Example usage for org.apache.zookeeper Transaction setData

List of usage examples for org.apache.zookeeper Transaction setData

Introduction

In this page you can find the example usage for org.apache.zookeeper Transaction setData.

Prototype

public Transaction setData(final String path, byte[] data, int version) 

Source Link

Usage

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);
    }
}