public MasterTime(Master master) throws IOException { this.zPath = master.getZooKeeperRoot() + Constants.ZMASTER_TICK; this.zk = master.getContext().getZooReaderWriter(); this.master = master; try { zk.putPersistentData(zPath, "0".getBytes(UTF_8), NodeExistsPolicy.SKIP); skewAmount = Long.parseLong(new String(zk.getData(zPath, null), UTF_8)) - System.nanoTime(); } catch (Exception ex) { throw new IOException("Error updating master time", ex); } this.timer = new Timer(); timer.schedule(this, 0, MILLISECONDS.convert(10, SECONDS)); }
long getCompactionCancelID() { String zTablePath = Constants.ZROOT + "/" + tabletServer.getInstanceID() + Constants.ZTABLES + "/" + extent.getTableId() + Constants.ZTABLE_COMPACT_CANCEL_ID; try { return Long .parseLong(new String(context.getZooReaderWriter().getData(zTablePath, null), UTF_8)); } catch (KeeperException | InterruptedException e) { throw new RuntimeException(e); } }
public long getFlushID() throws NoNodeException { try { String zTablePath = Constants.ZROOT + "/" + tabletServer.getInstanceID() + Constants.ZTABLES + "/" + extent.getTableId() + Constants.ZTABLE_FLUSH_ID; return Long .parseLong(new String(context.getZooReaderWriter().getData(zTablePath, null), UTF_8)); } catch (InterruptedException | NumberFormatException e) { throw new RuntimeException(e); } catch (KeeperException ke) { if (ke instanceof NoNodeException) { throw (NoNodeException) ke; } else { throw new RuntimeException(ke); } } }
case STOP: try { long zkTime = Long.parseLong(new String(zk.getData(zPath, null), UTF_8)); synchronized (this) { skewAmount = zkTime - System.nanoTime();
public List<DeadServer> getList() { List<DeadServer> result = new ArrayList<>(); try { List<String> children = zoo.getChildren(path); if (children != null) { for (String child : children) { Stat stat = new Stat(); byte[] data; try { data = zoo.getData(path + "/" + child, stat); } catch (NoNodeException nne) { // Another thread or process can delete child while this loop is running. // We ignore this error since it's harmless if we miss the deleted server // in the dead server list. continue; } DeadServer server = new DeadServer(child, stat.getMtime(), new String(data, UTF_8)); result.add(server); } } } catch (Exception ex) { log.error("{}", ex.getMessage(), ex); } return result; }
static ProblemReport decodeZooKeeperEntry(ServerContext context, String node) throws IOException, KeeperException, InterruptedException { byte bytes[] = Encoding.decodeBase64FileName(node); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); DataInputStream dis = new DataInputStream(bais); Table.ID tableId = Table.ID.of(dis.readUTF()); String problemType = dis.readUTF(); String resource = dis.readUTF(); String zpath = context.getZooKeeperRoot() + Constants.ZPROBLEMS + "/" + node; byte[] enc = context.getZooReaderWriter().getData(zpath, null); return new ProblemReport(tableId, ProblemType.valueOf(problemType), resource, enc); }
MasterGoalState getMasterGoalState() { while (true) try { byte[] data = context.getZooReaderWriter() .getData(getZooKeeperRoot() + Constants.ZMASTER_GOAL_STATE, null); return MasterGoalState.valueOf(new String(data)); } catch (Exception e) { log.error("Problem getting real goal state from zookeeper: ", e); sleepUninterruptibly(1, TimeUnit.SECONDS); } }
@Override public boolean hasSystemPermission(String user, SystemPermission permission) { byte[] perms; try { String path = ZKUserPath + "/" + user + ZKUserSysPerms; zoo.sync(path); perms = zoo.getData(path, null); } catch (KeeperException e) { if (e.code() == Code.NONODE) { return false; } log.warn("Unhandled KeeperException, failing closed for table permission check", e); return false; } catch (InterruptedException e) { log.warn("Unhandled InterruptedException, failing closed for table permission check", e); return false; } if (perms == null) return false; return ZKSecurityTool.convertSystemPermissions(perms).contains(permission); }
/** * Fetch all {@link AuthenticationKey}s currently stored in ZooKeeper beneath the configured * {@code baseNode}. * * @return A list of {@link AuthenticationKey}s */ public List<AuthenticationKey> getCurrentKeys() throws KeeperException, InterruptedException { checkState(initialized.get(), "Not initialized"); List<String> children = zk.getChildren(baseNode); // Shortcircuit to avoid a list creation if (children.isEmpty()) { return Collections.emptyList(); } // Deserialize each byte[] into an AuthenticationKey List<AuthenticationKey> keys = new ArrayList<>(children.size()); for (String child : children) { byte[] data = zk.getData(qualifyPath(child), null); if (data != null) { AuthenticationKey key = new AuthenticationKey(); try { key.readFields(new DataInputStream(new ByteArrayInputStream(data))); } catch (IOException e) { throw new AssertionError("Error reading from in-memory buffer which should not happen", e); } keys.add(key); } } return keys; }
public Pair<WalState,Path> state(TServerInstance instance, UUID uuid) throws WalMarkerException { try { String path = root() + "/" + instance + "/" + uuid; return parse(zoo.getData(path, null)); } catch (KeeperException | InterruptedException e) { throw new WalMarkerException(e); } }
try { try { processor.newProcessor().process(child, zoo.getData(childPath, null));
/** * @param args * : the name or UUID of the instance to be deleted */ public static void main(String[] args) throws Exception { Opts opts = new Opts(); opts.parseArgs(DeleteZooInstance.class.getName(), args); ZooReaderWriter zk = new ZooReaderWriter(new SiteConfiguration()); // try instance name: Set<String> instances = new HashSet<>(zk.getChildren(Constants.ZROOT + Constants.ZINSTANCES)); Set<String> uuids = new HashSet<>(zk.getChildren(Constants.ZROOT)); uuids.remove("instances"); if (instances.contains(opts.instance)) { String path = Constants.ZROOT + Constants.ZINSTANCES + "/" + opts.instance; byte[] data = zk.getData(path, null); deleteRetry(zk, path); deleteRetry(zk, Constants.ZROOT + "/" + new String(data, UTF_8)); } else if (uuids.contains(opts.instance)) { // look for the real instance name for (String instance : instances) { String path = Constants.ZROOT + Constants.ZINSTANCES + "/" + instance; byte[] data = zk.getData(path, null); if (opts.instance.equals(new String(data, UTF_8))) deleteRetry(zk, path); } deleteRetry(zk, Constants.ZROOT + "/" + opts.instance); } }
public List<Path> getWalsInUse(TServerInstance tsi) throws WalMarkerException { List<Path> result = new ArrayList<>(); try { String zpath = root() + "/" + tsi; zoo.sync(zpath); for (String child : zoo.getChildren(zpath)) { byte[] zdata = null; try { // This function is called by the Master. Its possible that Accumulo GC deletes an // unreferenced WAL in ZK after the call to getChildren above. Catch this exception inside // the loop so that not all children are ignored. zdata = zoo.getData(zpath + "/" + child, null); } catch (KeeperException.NoNodeException e) { log.debug("WAL state removed {} {} during getWalsInUse. Likely a race condition between " + "master and GC.", tsi, child); } if (zdata != null) { Pair<WalState,Path> parts = parse(zdata); if (parts.getFirst() != WalState.UNREFERENCED) { result.add(parts.getSecond()); } } } } catch (KeeperException.NoNodeException e) { log.debug("{} has no wal entry in zookeeper, assuming no logs", tsi); } catch (KeeperException | InterruptedException e) { throw new WalMarkerException(e); } return result; }
+ "/" + extent.getTableId() + Constants.ZTABLE_COMPACT_ID; String[] tokens = new String(context.getZooReaderWriter().getData(zTablePath, null), UTF_8) .split(","); long compactID = Long.parseLong(tokens[0]);
private static GCStatus fetchGcStatus() { GCStatus result = null; HostAndPort address = null; try { // Read the gc location from its lock ZooReaderWriter zk = context.getZooReaderWriter(); String path = context.getZooKeeperRoot() + Constants.ZGC_LOCK; List<String> locks = zk.getChildren(path, null); if (locks != null && locks.size() > 0) { Collections.sort(locks); address = new ServerServices(new String(zk.getData(path + "/" + locks.get(0), null), UTF_8)) .getAddress(Service.GC_CLIENT); GCMonitorService.Client client = ThriftUtil.getClient(new GCMonitorService.Client.Factory(), address, context); try { result = client.getStatus(Tracer.traceInfo(), getContext().rpcCreds()); } finally { ThriftUtil.returnClient(client); } } } catch (Exception ex) { log.warn("Unable to contact the garbage collector at " + address, ex); } return result; }
public static void main(String[] args) throws Exception { ServerUtilOpts opts = new ServerUtilOpts(); opts.parseArgs(MergeStats.class.getName(), args); try (AccumuloClient client = opts.createClient()) { Map<String,String> tableIdMap = client.tableOperations().tableIdMap(); ZooReaderWriter zooReaderWriter = opts.getServerContext().getZooReaderWriter(); for (Entry<String,String> entry : tableIdMap.entrySet()) { final String table = entry.getKey(), tableId = entry.getValue(); String path = ZooUtil.getRoot(client.getInstanceID()) + Constants.ZTABLES + "/" + tableId + "/merge"; MergeInfo info = new MergeInfo(); if (zooReaderWriter.exists(path)) { byte[] data = zooReaderWriter.getData(path, new Stat()); DataInputBuffer in = new DataInputBuffer(); in.reset(data, data.length); info.readFields(in); } System.out.println(String.format("%25s %10s %10s %s", table, info.getState(), info.getOperation(), info.getExtent())); } } } }
public MergeInfo getMergeInfo(Table.ID tableId) { synchronized (mergeLock) { try { String path = getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId + "/merge"; if (!context.getZooReaderWriter().exists(path)) return new MergeInfo(); byte[] data = context.getZooReaderWriter().getData(path, new Stat()); DataInputBuffer in = new DataInputBuffer(); in.reset(data, data.length); MergeInfo info = new MergeInfo(); info.readFields(in); return info; } catch (KeeperException.NoNodeException ex) { log.info("Error reading merge state, it probably just finished"); return new MergeInfo(); } catch (Exception ex) { log.warn("Unexpected error reading merge state", ex); return new MergeInfo(); } } }
final Retry retry = getRetryFactory().createRetry(); Stat stat = new Stat(); byte[] data = getData(zPath, false, stat); data = mutator.mutate(data); if (data == null)