private void getMasterLock(final String zMasterLoc) throws KeeperException, InterruptedException { log.info("trying to get master lock"); final String masterClientAddress = hostname + ":" + getConfiguration().getPort(Property.MASTER_CLIENTPORT)[0]; while (true) { MasterLockWatcher masterLockWatcher = new MasterLockWatcher(); masterLock = new ZooLock(zMasterLoc); masterLock.lockAsync(masterLockWatcher, masterClientAddress.getBytes()); masterLockWatcher.waitForChange(); if (masterLockWatcher.acquiredLock) { break; } if (!masterLockWatcher.failedToAcquireLock) { throw new IllegalStateException("master lock in unknown state"); } masterLock.tryToCancelAsyncLockOrUnlock(); sleepUninterruptibly(TIME_TO_WAIT_BETWEEN_LOCK_CHECKS, TimeUnit.MILLISECONDS); } setMasterState(MasterState.HAVE_LOCK); }
private static TServerInstance getTServerInstance(String address, ZooLock zooLock) { while (true) { try { return new TServerInstance(address, zooLock.getSessionId()); } catch (KeeperException e) { log.error(e, e); } catch (InterruptedException e) { log.error(e, e); } UtilWaitThread.sleep(1000); } }
private void getZooLock(HostAndPort addr) throws KeeperException, InterruptedException { String path = ZooUtil.getRoot(getInstance()) + Constants.ZGC_LOCK; LockWatcher lockWatcher = new LockWatcher() { @Override public void lostLock(LockLossReason reason) { Halt.halt("GC lock in zookeeper lost (reason = " + reason + "), exiting!", 1); } @Override public void unableToMonitorLockNode(final Throwable e) { // ACCUMULO-3651 Level changed to error and FATAL added to message for slf4j compatibility Halt.halt(-1, new Runnable() { @Override public void run() { log.error("FATAL: No longer able to monitor lock node ", e); } }); } }; while (true) { lock = new ZooLock(path); if (lock.tryLock(lockWatcher, new ServerServices(addr.toString(), Service.GC_CLIENT).toString().getBytes())) { log.debug("Got GC ZooKeeper lock"); return; } log.debug("Failed to get GC ZooKeeper lock, will retry"); sleepUninterruptibly(1, TimeUnit.SECONDS); } }
public static void main(String[] args) throws Exception { Instance instance = HdfsZooInstance.getInstance(); String tserverPath = ZooUtil.getRoot(instance) + Constants.ZTSERVERS; Opts opts = new Opts(); opts.parseArgs(TabletServerLocks.class.getName(), args); ZooCache cache = new ZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut()); if (opts.list) { IZooReaderWriter zoo = ZooReaderWriter.getInstance(); List<String> tabletServers = zoo.getChildren(tserverPath); for (String tabletServer : tabletServers) { byte[] lockData = ZooLock.getLockData(cache, tserverPath + "/" + tabletServer, null); String holder = null; if (lockData != null) { holder = new String(lockData, UTF_8); } System.out.printf("%32s %16s%n", tabletServer, holder); } } else if (opts.delete != null) { ZooLock.deleteLock(tserverPath + "/" + args[1]); } else { System.out.println( "Usage : " + TabletServerLocks.class.getName() + " -list|-delete <tserver lock>"); } }
tabletServerLock = new ZooLock(zPath); zoo.putPersistentData(zPath, new byte[0], NodeExistsPolicy.SKIP); if (tabletServerLock.tryLock(lw, lockContent)) { log.debug("Obtained tablet server lock " + tabletServerLock.getLockPath()); lockID = tabletServerLock.getLockID() .serialize(ZooUtil.getRoot(getInstance()) + Constants.ZTSERVERS + "/"); return;
tabletServerLock = new ZooLock(zPath); zoo.putPersistentData(zPath, new byte[0], NodeExistsPolicy.SKIP); if (tabletServerLock.tryLock(lw, lockContent)) { log.debug("Obtained tablet server lock " + tabletServerLock.getLockPath()); return;
private String lockString(ZooLock mlock) { return mlock.getLockID().serialize(ZooUtil.getRoot(instance) + Constants.ZMASTER_LOCK); }
if (tabletServerLock == null || !tabletServerLock.wasLockAcquired()) { log.debug("Got " + request + " message before my lock was acquired, ignoring..."); throw new RuntimeException("Lock not acquired"); if (tabletServerLock != null && tabletServerLock.wasLockAcquired() && !tabletServerLock.isLocked()) { Halt.halt(1, new Runnable() { @Override if (!ZooLock.isLockHeld(masterLockCache, lid)) { if (!ZooLock.isLockHeld(masterLockCache, lid)) { log.warn("Got " + request + " message from a master that does not hold the current lock " + lock);
public static boolean deleteLock(String path, String lockData) throws InterruptedException, KeeperException { return deleteLock(ZooReaderWriter.getInstance(), path, lockData); } }
lockHeld = ZooLock.isLockHeld(zooCache, new ZooUtil.LockID(zooRoot, lockId)); } catch (Exception e) { log.debug("Failed to verify lock was held " + lockId + " " + e.getMessage());
zoo.putPersistentData(zPath, new byte[] {}, NodeExistsPolicy.SKIP); ZooLock zlock = new ZooLock(zPath); if (zlock.tryLock(lw, lockContent)) { log.debug("Obtained tablet server lock " + zlock.getLockPath());
private static void retryZooKeeperUpdate(ClientContext context, ZooLock zooLock, ZooOperation op) { while (true) { try { IZooReaderWriter zoo = ZooReaderWriter.getInstance(); if (zoo.isLockHeld(zooLock.getLockID())) { op.run(zoo); } break; } catch (Exception e) { log.error("Unexpected exception {}", e.getMessage(), e); } sleepUninterruptibly(1, TimeUnit.SECONDS); } }
if (tabletServerLock == null || !tabletServerLock.wasLockAcquired()) { log.warn("Got " + request + " message from master before lock acquired, ignoring..."); throw new RuntimeException("Lock not acquired"); if (tabletServerLock != null && tabletServerLock.wasLockAcquired() && !tabletServerLock.isLocked()) { Halt.halt(1, new Runnable() { @Override if (!ZooLock.isLockHeld(masterLockCache, lid)) { if (!ZooLock.isLockHeld(masterLockCache, lid)) { log.warn("Got " + request + " message from a master that does not hold the current lock " + lock); throw new RuntimeException("bad master lock");
public static boolean deleteLock(String path, String lockData) throws InterruptedException, KeeperException { return deleteLock(ZooReaderWriter.getInstance(), path, lockData); } }
public static void main(String[] args) throws Exception { Instance instance = HdfsZooInstance.getInstance(); String tserverPath = ZooUtil.getRoot(instance) + Constants.ZTSERVERS; Opts opts = new Opts(); opts.parseArgs(TabletServerLocks.class.getName(), args); ZooCache cache = new ZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut()); if (opts.list) { IZooReaderWriter zoo = ZooReaderWriter.getInstance(); List<String> tabletServers = zoo.getChildren(tserverPath); for (String tabletServer : tabletServers) { byte[] lockData = ZooLock.getLockData(cache, tserverPath + "/" + tabletServer, null); String holder = null; if (lockData != null) { holder = new String(lockData, UTF_8); } System.out.printf("%32s %16s%n", tabletServer, holder); } } else if (opts.delete != null) { ZooLock.deleteLock(tserverPath + "/" + args[1]); } else { System.out.println("Usage : " + TabletServerLocks.class.getName() + " -list|-delete <tserver lock>"); } }
lockHeld = ZooLock.isLockHeld(zooCache, new ZooUtil.LockID(zooRoot, lockId)); } catch (Exception e) { log.debug("Failed to verify lock was held {} {}", lockId, e.getMessage());
private void getMasterLock(final String zMasterLoc) throws KeeperException, InterruptedException { log.info("trying to get master lock"); final String masterClientAddress = org.apache.accumulo.core.util.AddressUtil.toString(new InetSocketAddress(hostname, getSystemConfiguration().getPort( Property.MASTER_CLIENTPORT))); while (true) { MasterLockWatcher masterLockWatcher = new MasterLockWatcher(); masterLock = new ZooLock(zMasterLoc); masterLock.lockAsync(masterLockWatcher, masterClientAddress.getBytes(UTF_8)); masterLockWatcher.waitForChange(); if (masterLockWatcher.acquiredLock) { break; } if (!masterLockWatcher.failedToAcquireLock) { throw new IllegalStateException("master lock in unknown state"); } masterLock.tryToCancelAsyncLockOrUnlock(); UtilWaitThread.sleep(TIME_TO_WAIT_BETWEEN_LOCK_CHECKS); } setMasterState(MasterState.HAVE_LOCK); }
private void getZooLock(InetSocketAddress addr) throws KeeperException, InterruptedException { String address = AddressUtil.toString(addr); String path = ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZGC_LOCK; LockWatcher lockWatcher = new LockWatcher() { public void lostLock(LockLossReason reason) { Halt.halt("GC lock in zookeeper lost (reason = " + reason + "), exiting!"); } @Override public void unableToMonitorLockNode(final Throwable e) { Halt.halt(-1, new Runnable() { @Override public void run() { log.fatal("No longer able to monitor lock node ", e); } }); } }; while (true) { lock = new ZooLock(path); if (lock.tryLock(lockWatcher, new ServerServices(address, Service.GC_CLIENT).toString().getBytes(UTF_8))) { break; } UtilWaitThread.sleep(1000); } }
TServerInstance getTabletSession() { String address = getClientAddressString(); if (address == null) return null; try { return new TServerInstance(address, tabletServerLock.getSessionId()); } catch (Exception ex) { log.warn("Unable to read session from tablet server lock" + ex); return null; } }
private String lockString(ZooLock mlock) { return mlock.getLockID() .serialize(ZooUtil.getRoot(context.getInstance()) + Constants.ZMASTER_LOCK); }