@Override public byte[] getData(String zPath, Stat stat) throws KeeperException, InterruptedException { return getData(zPath, false, stat); }
private synchronized void updateHosts(String path, List<String> children) { log.debug("Scanning trace hosts in zookeeper: {}", path); try { List<String> hosts = new ArrayList<>(); for (String child : children) { byte[] data = zoo.getData(path + "/" + child, null); hosts.add(new String(data, UTF_8)); } this.hosts.clear(); this.hosts.addAll(hosts); log.debug("Trace hosts: {}", this.hosts); } catch (Exception ex) { log.error("unable to get destination hosts in zookeeper", ex); } } }
@VisibleForTesting static String getLocation(ZooReader zr, ClientContext context) throws KeeperException, InterruptedException { try { byte[] loc = zr.getData(context.getZooKeeperRoot() + Constants.ZMONITOR_HTTP_ADDR, null); return loc == null ? null : new String(loc, UTF_8); } catch (NoNodeException e) { // If there's no node advertising the monitor, there's no monitor. return null; } } }
private static TreeMap<String,UUID> getInstanceNames(ZooReader zk, boolean printErrors) { String instancesPath = Constants.ZROOT + Constants.ZINSTANCES; TreeMap<String,UUID> tm = new TreeMap<>(); List<String> names; try { names = zk.getChildren(instancesPath); } catch (Exception e) { handleException(e, printErrors); return tm; } for (String name : names) { String instanceNamePath = Constants.ZROOT + Constants.ZINSTANCES + "/" + name; try { UUID iid = UUID.fromString(new String(zk.getData(instanceNamePath, null), UTF_8)); tm.put(name, iid); } catch (Exception e) { handleException(e, printErrors); tm.put(name, null); } } return tm; }
private int updateAuthKeys(String path) throws KeeperException, InterruptedException { int keysAdded = 0; for (String child : zk.getChildren(path, this)) { String childPath = path + "/" + child; try { // Get the node data and reset the watcher AuthenticationKey key = deserializeKey(zk.getData(childPath, this, null)); secretManager.addKey(key); keysAdded++; } catch (NoNodeException e) { // The master expired(deleted) the key between when we saw it in getChildren() and when we // went to add it to our secret manager. log.trace("{} was deleted when we tried to access it", childPath); } } return keysAdded; }
@Override public void visit(ZooReader zoo, String path) throws Exception { String newPath = path.replace(context.getInstanceID(), newInstanceId); byte[] data = zoo.getData(path, null); List<ACL> acls = orig.getZooKeeper().getACL(path, new Stat()); if (acls.containsAll(Ids.READ_ACL_UNSAFE)) { new_.putPersistentData(newPath, data, NodeExistsPolicy.FAIL); } else { // upgrade if (acls.containsAll(Ids.OPEN_ACL_UNSAFE)) { // make user nodes private, they contain the user's password String parts[] = path.split("/"); if (parts[parts.length - 2].equals("users")) { new_.putPrivatePersistentData(newPath, data, NodeExistsPolicy.FAIL); } else { // everything else can have the readable acl new_.putPersistentData(newPath, data, NodeExistsPolicy.FAIL); } } else { new_.putPrivatePersistentData(newPath, data, NodeExistsPolicy.FAIL); } } } });
ZooReader reader = new ZooReader(context.getZooKeepers(), context.getZooKeepersSessionTimeOut()); replCoordinatorAddr = new String(reader.getData(zkPath, null), UTF_8); } catch (KeeperException | InterruptedException e) { log.error("Could not fetch remote coordinator port", e);
String replServiceAddr; try { replServiceAddr = new String(reader.getData( master.getZooKeeperRoot() + ReplicationConstants.ZOO_TSERVERS + "/" + tserver.hostPort(), null), UTF_8);
@Override public byte[] getData(String zPath, Stat stat) throws KeeperException, InterruptedException { return getData(zPath, false, stat); }
synchronized private void updateHosts(String path, List<String> children) { log.debug("Scanning trace hosts in zookeeper: " + path); try { List<String> hosts = new ArrayList<>(); for (String child : children) { byte[] data = zoo.getData(path + "/" + child, null); hosts.add(new String(data, UTF_8)); } this.hosts.clear(); this.hosts.addAll(hosts); log.debug("Trace hosts: " + this.hosts); } catch (Exception ex) { log.error("unable to get destination hosts in zookeeper", ex); } } }
public static String getLocation(Instance instance) throws KeeperException, InterruptedException { ZooReader zr = new ZooReader(instance.getZooKeepers(), 30000); byte[] loc = zr.getData(ZooUtil.getRoot(instance) + Constants.ZMONITOR_HTTP_ADDR, null); return loc == null ? null : new String(loc, UTF_8); } }
private static TreeMap<String,UUID> getInstanceNames(ZooReader zk) { String instancesPath = Constants.ZROOT + Constants.ZINSTANCES; TreeMap<String,UUID> tm = new TreeMap<String,UUID>(); List<String> names; try { names = zk.getChildren(instancesPath); } catch (Exception e) { handleException(e); return tm; } for (String name : names) { String instanceNamePath = Constants.ZROOT + Constants.ZINSTANCES + "/" + name; try { UUID iid = UUID.fromString(new String(zk.getData(instanceNamePath, null), UTF_8)); tm.put(name, iid); } catch (Exception e) { handleException(e); tm.put(name, null); } } return tm; }
private static TreeMap<String,UUID> getInstanceNames(ZooReader zk, boolean printErrors) { String instancesPath = Constants.ZROOT + Constants.ZINSTANCES; TreeMap<String,UUID> tm = new TreeMap<>(); List<String> names; try { names = zk.getChildren(instancesPath); } catch (Exception e) { handleException(e, printErrors); return tm; } for (String name : names) { String instanceNamePath = Constants.ZROOT + Constants.ZINSTANCES + "/" + name; try { UUID iid = UUID.fromString(new String(zk.getData(instanceNamePath, null), UTF_8)); tm.put(name, iid); } catch (Exception e) { handleException(e, printErrors); tm.put(name, null); } } return tm; }
private int updateAuthKeys(String path) throws KeeperException, InterruptedException { int keysAdded = 0; for (String child : zk.getChildren(path, this)) { String childPath = path + "/" + child; try { // Get the node data and reset the watcher AuthenticationKey key = deserializeKey(zk.getData(childPath, this, null)); secretManager.addKey(key); keysAdded++; } catch (NoNodeException e) { // The master expired(deleted) the key between when we saw it in getChildren() and when we // went to add it to our secret manager. log.trace("{} was deleted when we tried to access it", childPath); } } return keysAdded; }
@Override public void visit(ZooReader zoo, String path) throws Exception { String newPath = path.replace(inst.getInstanceID(), newInstanceId); byte[] data = zoo.getData(path, null); List<ACL> acls = orig.getZooKeeper().getACL(path, new Stat()); if (acls.containsAll(Ids.READ_ACL_UNSAFE)) { new_.putPersistentData(newPath, data, NodeExistsPolicy.FAIL); } else { // upgrade if (acls.containsAll(Ids.OPEN_ACL_UNSAFE)) { // make user nodes private, they contain the user's password String parts[] = path.split("/"); if (parts[parts.length - 2].equals("users")) { new_.putPrivatePersistentData(newPath, data, NodeExistsPolicy.FAIL); } else { // everything else can have the readable acl new_.putPersistentData(newPath, data, NodeExistsPolicy.FAIL); } } else { new_.putPrivatePersistentData(newPath, data, NodeExistsPolicy.FAIL); } } } });
public void visit(ZooReader zoo, String path) throws Exception { String newPath = path.replace(inst.getInstanceID(), newInstanceId); byte[] data = zoo.getData(path, null); List<ACL> acls = orig.getZooKeeper().getACL(path, new Stat()); if (acls.containsAll(Ids.READ_ACL_UNSAFE)) { new_.putPersistentData(newPath, data, NodeExistsPolicy.FAIL); } else { // upgrade if (acls.containsAll(Ids.OPEN_ACL_UNSAFE)) { // make user nodes private, they contain the user's password String parts[] = path.split("/"); if (parts[parts.length - 2].equals("users")) { new_.putPrivatePersistentData(newPath, data, NodeExistsPolicy.FAIL); } else { // everything else can have the readable acl new_.putPersistentData(newPath, data, NodeExistsPolicy.FAIL); } } else { new_.putPrivatePersistentData(newPath, data, NodeExistsPolicy.FAIL); } } } });
Set<TServerInstance> getTServers(Instance instance) throws KeeperException, InterruptedException { Set<TServerInstance> result = new HashSet<>(); ZooReader rdr = new ZooReader(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut()); String base = ZooUtil.getRoot(instance) + Constants.ZTSERVERS; for (String child : rdr.getChildren(base)) { try { List<String> children = rdr.getChildren(base + "/" + child); if (children.size() > 0) { Collections.sort(children); Stat stat = new Stat(); byte[] data = rdr.getData(base + "/" + child + "/" + children.get(0), stat); if (!"master".equals(new String(data, UTF_8))) { result.add(new TServerInstance(AddressUtil.parseAddress(child, false), stat.getEphemeralOwner())); } } } catch (KeeperException.NoNodeException ex) { // someone beat us too it } } return result; }
@Test public void tserverReplicationServicePortsAreAdvertised() throws Exception { // Wait for the cluster to be up Connector conn = getConnector(); Instance inst = conn.getInstance(); // Wait for a tserver to come up to fulfill this request conn.tableOperations().create("foo"); Scanner s = conn.createScanner("foo", Authorizations.EMPTY); Assert.assertEquals(0, Iterables.size(s)); ZooReader zreader = new ZooReader(inst.getZooKeepers(), inst.getZooKeepersSessionTimeOut()); Set<String> tserverHost = new HashSet<>(); tserverHost.addAll(zreader.getChildren(ZooUtil.getRoot(inst) + Constants.ZTSERVERS)); Set<HostAndPort> replicationServices = new HashSet<>(); for (String tserver : tserverHost) { try { byte[] portData = zreader.getData( ZooUtil.getRoot(inst) + ReplicationConstants.ZOO_TSERVERS + "/" + tserver, null); HostAndPort replAddress = HostAndPort.fromString(new String(portData, UTF_8)); replicationServices.add(replAddress); } catch (Exception e) { log.error("Could not find port for {}", tserver, e); Assert.fail("Did not find replication port advertisement for " + tserver); } } // Each tserver should also have equial replicaiton services running internally Assert.assertEquals("Expected an equal number of replication servicers and tservers", tserverHost.size(), replicationServices.size()); }
String replCoordAddr = new String(zreader.getData( ZooUtil.getRoot(inst) + Constants.ZMASTER_REPLICATION_COORDINATOR_ADDR, null), UTF_8);