@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); } } } });
public static void main(String[] args) throws Exception { final String app = "tracer"; ServerOpts opts = new ServerOpts(); opts.parseArgs(app, args); ServerContext context = new ServerContext(opts.getSiteConfiguration()); loginTracer(context.getConfiguration()); MetricsSystemHelper.configure(TraceServer.class.getSimpleName()); ServerUtil.init(context, app); try (TraceServer server = new TraceServer(context, opts.getAddress())) { server.run(); } finally { log.info("tracer stopping"); context.getZooReaderWriter().getZooKeeper().close(); } }
@Override public void delete(String path, int version) throws InterruptedException, KeeperException { final Retry retry = getRetryFactory().createRetry(); while (true) { try { getZooKeeper().delete(path, version); return; } catch (KeeperException e) { final Code code = e.code(); if (code == Code.NONODE) { if (retry.hasRetried()) { // A retried delete could have deleted the node, assume that was the case log.debug("Delete saw no node on a retry. Assuming node was deleted"); return; } throw e; } else if (code == Code.CONNECTIONLOSS || code == Code.OPERATIONTIMEOUT || code == Code.SESSIONEXPIRED) { // retry if we have more attempts to do so retryOrThrow(retry, e); } else { throw e; } } retry.waitForNextAttempt(); } }
final Retry retry = getRetryFactory().createRetry(); try { getZooKeeper().create(zPath, createValue, acl, CreateMode.PERSISTENT); return createValue; } catch (KeeperException ex) { return data; try { getZooKeeper().setData(zPath, data, stat.getVersion()); return data; } catch (KeeperException ex) {
@Override public void delete(String path, int version) throws InterruptedException, KeeperException { final Retry retry = getRetryFactory().createRetry(); while (true) { try { getZooKeeper().delete(path, version); return; } catch (KeeperException e) { final Code code = e.code(); if (code == Code.NONODE) { if (retry.hasRetried()) { // A retried delete could have deleted the node, assume that was the case log.debug("Delete saw no node on a retry. Assuming node was deleted"); return; } throw e; } else if (code == Code.CONNECTIONLOSS || code == Code.OPERATIONTIMEOUT || code == Code.SESSIONEXPIRED) { // retry if we have more attempts to do so retryOrThrow(retry, e); } else { throw e; } } retry.waitForNextAttempt(); } }
final Retry retry = getRetryFactory().createRetry(); try { getZooKeeper().create(zPath, createValue, acl, CreateMode.PERSISTENT); return createValue; } catch (KeeperException ex) { return data; try { getZooKeeper().setData(zPath, data, stat.getVersion()); return data; } catch (KeeperException ex) {