public void visitAllLocks(MetadataHandler handler) throws IOException { for (String tableName : getTableNames()) { String tableLockZNode = ZKUtil.joinZNode(zkWatcher.tableLockZNode, tableName); ZKInterProcessReadWriteLock lock = new ZKInterProcessReadWriteLock( zkWatcher, tableLockZNode, null); lock.readLock(null).visitLocks(handler); lock.writeLock(null).visitLocks(handler); } }
public void checkTableLocks() throws IOException { TableLockManager tableLockManager = TableLockManager.createTableLockManager(zkWatcher.getConfiguration(), zkWatcher, null); final long expireDate = EnvironmentEdgeManager.currentTime() - expireTimeout; MetadataHandler handler = new MetadataHandler() { @Override public void handleMetadata(byte[] ownerMetadata) { ZooKeeperProtos.TableLock data = TableLockManager.fromBytes(ownerMetadata); String msg = "Table lock acquire attempt found:"; if (data != null) { msg = msg + String.format("[tableName=%s:%s, lockOwner=%s, threadId=%s, " + "purpose=%s, isShared=%s, createTime=%s]", data.getTableName().getNamespace().toStringUtf8(), data.getTableName().getQualifier().toStringUtf8(), ProtobufUtil.toServerName(data.getLockOwner()), data.getThreadId(), data.getPurpose(), data.getIsShared(), data.getCreateTime()); } if (data != null && data.hasCreateTime() && data.getCreateTime() < expireDate) { errorReporter.reportError(HBaseFsck.ErrorReporter.ERROR_CODE.EXPIRED_TABLE_LOCK, msg); } else { errorReporter.print(msg); } } }; tableLockManager.visitAllLocks(handler); }
private static ZKInterProcessReadWriteLock getReadWriteLock(String testName) throws IOException { MetadataHandler handler = new MetadataHandler() { @Override public void handleMetadata(byte[] ownerMetadata) { LOG.info("Lock info: " + Bytes.toString(ownerMetadata)); } }; ZooKeeperWatcher zkWatcher = getZooKeeperWatcher(testName); String znode = ZKUtil.joinZNode(zkWatcher.tableLockZNode, testName); return new ZKInterProcessReadWriteLock(zkWatcher, znode, handler); }
public void checkTableLocks() throws IOException { TableLockManager tableLockManager = TableLockManager.createTableLockManager(zkWatcher.getConfiguration(), zkWatcher, null); final long expireDate = EnvironmentEdgeManager.currentTime() - expireTimeout; MetadataHandler handler = new MetadataHandler() { @Override public void handleMetadata(byte[] ownerMetadata) { ZooKeeperProtos.TableLock data = TableLockManager.fromBytes(ownerMetadata); String msg = "Table lock acquire attempt found:"; if (data != null) { msg = msg + String.format("[tableName=%s, lockOwner=%s, threadId=%s, " + "purpose=%s, isShared=%s, createTime=%s]", Bytes.toString(data.getTableName().toByteArray()), ProtobufUtil.toServerName(data.getLockOwner()), data.getThreadId(), data.getPurpose(), data.getIsShared(), data.getCreateTime()); } if (data != null && data.hasCreateTime() && data.getCreateTime() < expireDate) { errorReporter.reportError(HBaseFsck.ErrorReporter.ERROR_CODE.EXPIRED_TABLE_LOCK, msg); } else { errorReporter.print(msg); } } }; tableLockManager.visitAllLocks(handler); }
public void checkTableLocks() throws IOException { TableLockManager tableLockManager = TableLockManager.createTableLockManager(zkWatcher.getConfiguration(), zkWatcher, null); final long expireDate = EnvironmentEdgeManager.currentTimeMillis() - expireTimeout; MetadataHandler handler = new MetadataHandler() { @Override public void handleMetadata(byte[] ownerMetadata) { ZooKeeperProtos.TableLock data = TableLockManager.fromBytes(ownerMetadata); String msg = "Table lock acquire attempt found:"; if (data != null) { msg = msg + String.format("[tableName=%s, lockOwner=%s, threadId=%s, " + "purpose=%s, isShared=%s, createTime=%s]", Bytes.toString(data.getTableName().toByteArray()), ProtobufUtil.toServerName(data.getLockOwner()), data.getThreadId(), data.getPurpose(), data.getIsShared(), data.getCreateTime()); } if (data != null && data.hasCreateTime() && data.getCreateTime() < expireDate) { errorReporter.reportError(HBaseFsck.ErrorReporter.ERROR_CODE.EXPIRED_TABLE_LOCK, msg); } else { errorReporter.print(msg); } } }; tableLockManager.visitAllLocks(handler); }
public void checkTableLocks() throws IOException { TableLockManager tableLockManager = TableLockManager.createTableLockManager(zkWatcher.getConfiguration(), zkWatcher, null); final long expireDate = EnvironmentEdgeManager.currentTimeMillis() - expireTimeout; MetadataHandler handler = new MetadataHandler() { @Override public void handleMetadata(byte[] ownerMetadata) { ZooKeeperProtos.TableLock data = TableLockManager.fromBytes(ownerMetadata); String msg = "Table lock acquire attempt found:"; if (data != null) { msg = msg + String.format("[tableName=%s, lockOwner=%s, threadId=%s, " + "purpose=%s, isShared=%s, createTime=%s]", Bytes.toString(data.getTableName().toByteArray()), ProtobufUtil.toServerName(data.getLockOwner()), data.getThreadId(), data.getPurpose(), data.getIsShared(), data.getCreateTime()); } if (data.hasCreateTime() && data.getCreateTime() < expireDate) { errorReporter.reportError(HBaseFsck.ErrorReporter.ERROR_CODE.EXPIRED_TABLE_LOCK, msg); } else { errorReporter.print(msg); } } }; tableLockManager.visitAllLocks(handler); }
@Override public void visitAllLocks(MetadataHandler handler) throws IOException { }
/** * Creates a DistributedReadWriteLock instance. * @param zkWatcher * @param znode ZNode path for the lock * @param handler An object that will handle de-serializing and processing * the metadata associated with reader or writer locks * created by this object or null if none desired. */ public ZKInterProcessReadWriteLock(ZooKeeperWatcher zkWatcher, String znode, MetadataHandler handler) { this.zkWatcher = zkWatcher; this.znode = znode; this.handler = handler; }
/** * Visits all table locks(read and write), and lock attempts with the given callback * MetadataHandler. * @param handler the metadata handler to call * @throws IOException If there is an unrecoverable error */ public abstract void visitAllLocks(MetadataHandler handler) throws IOException;