conf.getClassByName(lockMgrName), conf); lockManagerCtx = new HiveLockManagerCtx(conf); lockMgr.setContext(lockManagerCtx); } catch (Exception e) { lockMgr.close(); } catch (LockException e1) { lockMgr.refresh(); return lockMgr;
@Override public int unlockTable(Hive hiveDB, UnlockTableDesc unlockTbl) throws HiveException { HiveLockManager lockMgr = getAndCheckLockManager(); String tabName = unlockTbl.getTableName(); HiveLockObject obj = HiveLockObject.createFrom(hiveDB, tabName, unlockTbl.getPartSpec()); List<HiveLock> locks = lockMgr.getLocks(obj, false, false); if ((locks == null) || (locks.isEmpty())) { throw new HiveException("Table " + tabName + " is not locked "); } Iterator<HiveLock> locksIter = locks.iterator(); while (locksIter.hasNext()) { HiveLock lock = locksIter.next(); lockMgr.unlock(lock); } return 0; }
@Override public void releaseLocks(List<HiveLock> hiveLocks) throws LockException { // If there's no lock manager, it essentially means we didn't acquire locks in the first place, // thus no need to release locks if (lockMgr != null) { lockMgr.releaseLocks(hiveLocks); } }
lDrvInp.abort(); LockException lEx = new LockException(ErrorMsg.LOCK_ACQUIRE_CANCELLED.getMsg()); when(mockLockManager.lock(anyListOf(HiveLockObj.class), eq(false), eq(lDrvState))).thenReturn(expectedLocks); when(mockLockManager.lock(anyListOf(HiveLockObj.class), eq(false), eq(lDrvInp))).thenThrow(lEx); doNothing().when(mockLockManager).setContext(any(HiveLockManagerCtx.class)); doNothing().when(mockLockManager).close(); ArgumentCaptor<List> lockObjsCaptor = ArgumentCaptor.forClass(List.class); Assert.assertEquals(expectedLocks.get(0).getHiveLockObject().getName(), resultLocks.get(0).getHiveLockObject().getName()); verify(mockLockManager).lock(lockObjsCaptor.capture(), eq(false), eq(lDrvState)); List<HiveLockObj> lockObjs = lockObjsCaptor.getValue(); Assert.assertEquals(2, lockObjs.size());
@Override public int lockDatabase(Hive hiveDB, LockDatabaseDesc lockDb) throws HiveException { HiveLockManager lockMgr = getAndCheckLockManager(); HiveLockMode mode = HiveLockMode.valueOf(lockDb.getMode()); String dbName = lockDb.getDatabaseName(); Database dbObj = hiveDB.getDatabase(dbName); if (dbObj == null) { throw new HiveException("Database " + dbName + " does not exist "); } HiveLockObjectData lockData = new HiveLockObjectData(lockDb.getQueryId(), String.valueOf(System.currentTimeMillis()), "EXPLICIT", lockDb.getQueryStr(), conf); HiveLock lck = lockMgr.lock(new HiveLockObject(dbObj.getName(), lockData), mode, true); if (lck == null) { return 1; } return 0; }
@Override protected void destruct() { if (lockMgr != null) { try { lockMgr.close(); } catch (LockException e) { // Not much I can do about it. LOG.warn("Got exception when closing lock manager " + e.getMessage()); } } }
private void setLockManager() throws SemanticException { boolean supportConcurrency = conf.getBoolVar(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY); if (supportConcurrency) { String lockMgr = conf.getVar(HiveConf.ConfVars.HIVE_LOCK_MANAGER); if ((lockMgr == null) || (lockMgr.isEmpty())) { throw new SemanticException(ErrorMsg.LOCKMGR_NOT_SPECIFIED.getMsg()); } try { hiveLockMgr = (HiveLockManager) ReflectionUtils.newInstance(conf.getClassByName(lockMgr), conf); hiveLockMgr.setContext(new HiveLockManagerCtx(conf)); } catch (Exception e) { throw new SemanticException(ErrorMsg.LOCKMGR_NOT_INITIALIZED.getMsg() + e.getMessage()); } } }
protected void destruct() { if (lockMgr != null) { try { lockMgr.close(); } catch (LockException e) { // Not much I can do about it. LOG.warn("Got exception when closing lock manager " + e.getMessage()); } } }
@Override public int unlockTable(Hive hiveDB, UnlockTableDesc unlockTbl) throws HiveException { HiveLockManager lockMgr = getAndCheckLockManager(); String tabName = unlockTbl.getTableName(); HiveLockObject obj = HiveLockObject.createFrom(hiveDB, tabName, unlockTbl.getPartSpec()); List<HiveLock> locks = lockMgr.getLocks(obj, false, false); if ((locks == null) || (locks.isEmpty())) { throw new HiveException("Table " + tabName + " is not locked "); } Iterator<HiveLock> locksIter = locks.iterator(); while (locksIter.hasNext()) { HiveLock lock = locksIter.next(); lockMgr.unlock(lock); } return 0; }
lockMgr = (HiveLockManager)ReflectionUtils.newInstance( conf.getClassByName(lockMgrName), conf); lockMgr.setContext(new HiveLockManagerCtx(conf)); } catch (Exception e) { lockMgr.close(); } catch (LockException e1) { lockMgr.refresh(); return lockMgr;
@Test public void testLockAcquisitionAndRelease() throws Exception { addTableInput(); QueryPlan qp = new MockQueryPlan(this, HiveOperation.QUERY); txnMgr.openTxn(ctx, "fred"); txnMgr.acquireLocks(qp, ctx, "fred"); List<HiveLock> locks = ctx.getHiveLocks(); Assert.assertEquals(1, locks.size()); txnMgr.commitTxn(); locks = txnMgr.getLockManager().getLocks(false, false); Assert.assertEquals(0, locks.size()); }
@Override public int lockDatabase(Hive hiveDB, LockDatabaseDesc lockDb) throws HiveException { HiveLockManager lockMgr = getAndCheckLockManager(); HiveLockMode mode = HiveLockMode.valueOf(lockDb.getMode()); String dbName = lockDb.getDatabaseName(); Database dbObj = hiveDB.getDatabase(dbName); if (dbObj == null) { throw new HiveException("Database " + dbName + " does not exist "); } HiveLockObjectData lockData = new HiveLockObjectData(lockDb.getQueryId(), String.valueOf(System.currentTimeMillis()), "EXPLICIT", lockDb.getQueryStr()); HiveLock lck = lockMgr.lock(new HiveLockObject(dbObj.getName(), lockData), mode, true); if (lck == null) { return 1; } return 0; }
protected void destruct() { if (lockMgr != null) { try { lockMgr.close(); } catch (LockException e) { // Not much I can do about it. LOG.warn("Got exception when closing lock manager " + e.getMessage()); } } }
@Override public void releaseLocks(List<HiveLock> hiveLocks) throws LockException { // If there's no lock manager, it essentially means we didn't acquire locks in the first place, // thus no need to release locks if (lockMgr != null) { lockMgr.releaseLocks(hiveLocks); } }
@Override public int unlockDatabase(Hive hiveDB, UnlockDatabaseDesc unlockDb) throws HiveException { HiveLockManager lockMgr = getAndCheckLockManager(); String dbName = unlockDb.getDatabaseName(); Database dbObj = hiveDB.getDatabase(dbName); if (dbObj == null) { throw new HiveException("Database " + dbName + " does not exist "); } HiveLockObject obj = new HiveLockObject(dbObj.getName(), null); List<HiveLock> locks = lockMgr.getLocks(obj, false, false); if ((locks == null) || (locks.isEmpty())) { throw new HiveException("Database " + dbName + " is not locked "); } for (HiveLock lock: locks) { lockMgr.unlock(lock); } return 0; }
lockMgr = (HiveLockManager)ReflectionUtils.newInstance( conf.getClassByName(lockMgrName), conf); lockMgr.setContext(new HiveLockManagerCtx(conf)); } catch (Exception e) { lockMgr.close(); } catch (LockException e1) { lockMgr.refresh(); return lockMgr;
@Test public void testDDLExclusive() throws Exception { WriteEntity we = addTableOutput(WriteEntity.WriteType.DDL_EXCLUSIVE); QueryPlan qp = new MockQueryPlan(this, HiveOperation.DROPTABLE); txnMgr.openTxn(ctx, "fred"); txnMgr.acquireLocks(qp, ctx, "fred"); List<HiveLock> locks = ctx.getHiveLocks(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(1, TxnDbUtil.countLockComponents(conf, ((DbLockManager.DbHiveLock) locks.get(0)).lockId)); txnMgr.rollbackTxn(); locks = txnMgr.getLockManager().getLocks(false, false); Assert.assertEquals(0, locks.size()); }