private static LockRequest createLockRequest(final HiveEndPoint hiveEndPoint, String partNameForLock, String user, long txnId, String agentInfo) { LockRequestBuilder rqstBuilder = agentInfo == null ? new LockRequestBuilder() : new LockRequestBuilder(agentInfo); rqstBuilder.setUser(user); rqstBuilder.setTransactionId(txnId); LockComponentBuilder lockCompBuilder = new LockComponentBuilder() .setDbName(hiveEndPoint.database) .setTableName(hiveEndPoint.table) .setShared() .setOperationType(DataOperationType.INSERT); if (partNameForLock!=null && !partNameForLock.isEmpty() ) { lockCompBuilder.setPartitionName(partNameForLock); } rqstBuilder.addLockComponent(lockCompBuilder.build()); return rqstBuilder.build(); } } // class TransactionBatchImpl
LockRequestBuilder rqstBuilder = new LockRequestBuilder(queryId); rqstBuilder.setTransactionId(txnId) .setUser(username); return null; rqstBuilder.addLockComponents(lockComponents); LockState lockState = lockMgr.lock(rqstBuilder.build(), queryId, isBlocking, locks); ctx.setHiveLocks(locks); return lockState;
@Test public void noUser() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp); boolean caughtException = false; try { LockRequest req = bldr.build(); } catch (RuntimeException e) { Assert.assertEquals("Cannot build a lock without giving a user", e.getMessage()); caughtException = true; } Assert.assertTrue(caughtException); }
private LockRequest createLockRequest(final String dbName, final String tableName) throws TException { UserGroupInformation loggedInUser = null; String username; try { loggedInUser = UserGroupInformation.getLoginUser(); } catch (IOException e) { LOG.warn("Unable to get logged in user via UGI. err: {}", e.getMessage()); } if (loggedInUser == null) { username = System.getProperty("user.name"); } else { username = loggedInUser.getShortUserName(); } long txnId = getMsc().openTxn(username); String agentInfo = Thread.currentThread().getName(); LockRequestBuilder requestBuilder = new LockRequestBuilder(agentInfo); requestBuilder.setUser(username); requestBuilder.setTransactionId(txnId); LockComponentBuilder lockCompBuilder = new LockComponentBuilder() .setDbName(dbName) .setTableName(tableName) .setIsTransactional(true) .setExclusive() // WriteType is DDL_EXCLUSIVE for MSCK REPAIR so we need NO_TXN. Refer AcidUtils.makeLockComponents .setOperationType(DataOperationType.NO_TXN); requestBuilder.addLockComponent(lockCompBuilder.build()); LOG.info("Created lock(X) request with info - user: {} txnId: {} agentInfo: {} dbName: {} tableName: {}", username, txnId, agentInfo, dbName, tableName); return requestBuilder.build(); }
@Test public void testExExDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); }
private static LockRequest createLockRequest(final HiveStreamingConnection connection, String partNameForLock, String user, long txnId, String agentInfo) { LockRequestBuilder requestBuilder = new LockRequestBuilder(agentInfo); requestBuilder.setUser(user); requestBuilder.setTransactionId(txnId); LockComponentBuilder lockCompBuilder = new LockComponentBuilder() .setDbName(connection.getDatabase()) .setTableName(connection.getTable().getTableName()) .setShared() .setOperationType(DataOperationType.INSERT); if (connection.isDynamicPartitioning()) { lockCompBuilder.setIsDynamicPartitionWrite(true); } if (partNameForLock != null && !partNameForLock.isEmpty()) { lockCompBuilder.setPartitionName(partNameForLock); } requestBuilder.addLockComponent(lockCompBuilder.build()); return requestBuilder.build(); }
@Test public void testTwoSeparateDbs() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "yourdb"); bldr.addLockComponent(comp); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(2, locks.size()); }
private LockRequest buildLockRequest(Long transactionId) { if (transactionId == null && !sinks.isEmpty()) { throw new IllegalArgumentException("Cannot sink to tables outside of a transaction: sinks=" + asStrings(sinks)); } LockRequestBuilder requestBuilder = new LockRequestBuilder(); for (Table table : tables) { LockComponentBuilder componentBuilder = new LockComponentBuilder().setDbName(table.getDbName()).setTableName( table.getTableName()); //todo: DataOperationType is set conservatively here, we'd really want to distinguish update/delete //and insert/select and if resource (that is written to) is ACID or not if (sinks.contains(table)) { componentBuilder.setSemiShared().setOperationType(DataOperationType.UPDATE).setIsTransactional(true); } else { componentBuilder.setShared().setOperationType(DataOperationType.INSERT).setIsTransactional(true); } LockComponent component = componentBuilder.build(); requestBuilder.addLockComponent(component); } if (transactionId != null) { requestBuilder.setTransactionId(transactionId); } LockRequest request = requestBuilder.setUser(user).build(); return request; }
@Test public void testSWSWDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.SHARED_WRITE, locks.get(0).getType()); }
@Test public void testSRExDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.EXCLUSIVE, locks.get(0).getType()); }
@Test public void testExSWDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.EXCLUSIVE, locks.get(0).getType()); }
@Test public void testSRSWDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.SHARED_WRITE, locks.get(0).getType()); }
@Test public void testExSRDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.EXCLUSIVE, locks.get(0).getType()); }
@Test public void testSWExDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.EXCLUSIVE, locks.get(0).getType()); }
@Test public void testSRSRDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.SHARED_READ, locks.get(0).getType()); }
@Test public void testSWSRDb() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.SHARED_WRITE, locks.get(0).getType()); }
@Test public void testTwoSeparateTables() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); comp.setTablename("yourtable"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(2, locks.size()); }
@Test public void testExExTable() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); }
@Test public void testSWSWTable() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.SHARED_WRITE, locks.get(0).getType()); }
@Test public void testSWSRTable() { LockRequestBuilder bldr = new LockRequestBuilder(); LockComponent comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp); comp = new LockComponent(LockType.SHARED_READ, LockLevel.DB, "mydb"); comp.setTablename("mytable"); bldr.addLockComponent(comp).setUser("fred"); LockRequest req = bldr.build(); List<LockComponent> locks = req.getComponent(); Assert.assertEquals(1, locks.size()); Assert.assertEquals(LockType.SHARED_WRITE, locks.get(0).getType()); }